繁体   English   中英

Linux系统命令无法通过crontab在Perl脚本中使用

[英]Linux system command not working in Perl script via crontab

我每30分钟在crontab中添加一个脚本。 该行如下:

  */30 * * * * root perl /root/perl.pl

上面的脚本执行了系统命令“ top”,并打印在日志文件中。

如果我手动运行它,则运行良好。 但是,通过crontab运行它时,它没有显示出所需的结果。 请有人可以帮我这个忙。 谢谢。


上面的perl脚本中的命令是:

 $top = `sudo top`;

我得到的错误是:

sudo: sorry, you must have a tty to run sudo

我将命令从sudo更改为visudo。 但是问题仍然存在。

您应该在cron中使用完整路径(并使用which perl查找完整路径):

*/30 * * * * root /usr/bin/perl /root/perl.pl 

或者更好的方法是,使用chmod +x使脚本可执行,然后将解释器添加到脚本#!/usr/bin/perl -w的开头,并直接从cron调用它

*/30 * * * * root /root/perl.pl 

另外,如果perl脚本中有问题,您可以像这样从cron输出结果

*/30 * * * * root /root/perl.pl > /tmp/myscript.log

您应该查看有关visudo的requiretty设置。 寻找一条读为Defaults requiretty 您可以尝试将其注释掉,但是会牺牲一些安全性。 man sudoers

您还可以尝试通过一次迭代以批处理模式运行top

$top = `sudo top -bn1`;

批处理模式选项用于将输出发送到其他程序。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM