0

我每 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。但问题仍然存在。

4

2 回答 2

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
于 2013-09-13T07:53:48.110 回答
0

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

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

$top = `sudo top -bn1`;

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

于 2014-02-19T18:07:34.037 回答