Linux系统命令无法通过crontab在Perl脚本中运行

时间:2013-09-12 20:43:26

标签: linux perl 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。但问题仍然存在。

2 个答案:

答案 0 :(得分:0)

您应该使用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

答案 1 :(得分:0)

您应该查看有关visudo的requiretty设置。查找标有Defaults requiretty的行。你可以尝试评论它,但你会牺牲一些安全性。请参阅man sudoers

您还可以尝试在批处理模式下运行top,只需一次迭代:

$top = `sudo top -bn1`;

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