perl脚本没有通过cron运行

时间:2014-05-04 13:48:09

标签: php perl unix crontab

我需要你的帮助。 我为PHP应用程序编写了一个PERL脚本,需要每5分钟运行一次。 该脚本将调用PHP程序,该程序将从MySQL DB获取数据并生成excel报告,并将这些报告发送给特定用户。 当我使用命令手动运行此脚本时,每件事情似乎都很好(perl reports.pl)。 但是当我在一个cron选项卡中设置这个Perl时,没有任何工作,报告也没有生成。

详细信息:perl脚本路径/opt/app/deweb/web/EDI/Microsoft/reports.pl

此脚本将调用PHP程序(/opt/app/deweb/web/EDI/Microsoft/reports.php

content of script
#!/usr/local/bin/perl
use Net::FTP;
use File::Copy;
use POSIX;
@errorreport = `php /opt/app/deweb/web/EDI/Microsoft/reports.php`;
print "@errorreport\n";
exit;

使用命令 - perl reports.pl

手动运行时效果非常好

在CRON中设置时没有结果:

*/5 7-19 * * * /usr/local/bin/perl /opt/app/deweb/web/EDI/Microsoft/reports.pl

请注意,此crontab位于名为webserv的超级用户帐户下,我的登录可以在此超级用户帐户下进行编辑。 我正在使用命令:: sudo -u webserv crontab -e

编辑此cron选项卡

2 个答案:

答案 0 :(得分:0)

我会检查以下内容:

  1. 是否使用sudo -u webserv perl reports.pl运行?如果没有,请修复webserv用户(权限或其他)的问题,它也应该通过cron工作。
  2. which perl使用您的登录信息会为您/usr/local/bin/perl吗?如果没有,请将crontab中的Perl路径更改为which perl中解决问题的路径。

答案 1 :(得分:0)

我发现自己处于相同的状态。在试图找出原因之后,我几乎可以确定这种情况发生的原因。 Crontab与运行脚本时的环境变量不同。你必须确定路径。例如,尝试在脚本的父目录之外运行/ perl-path /path-to-perl-script/script.pl这样的脚本,我几乎可以肯定你的程序不会找到一些文件。当你从perl脚本调用一个php脚本时,你的php脚本的路径也可能出现同样的问题。

所以解决方案是使用绝对路径而不是相对路径。

另外在你的perl脚本中不要使用php但是/ full-path-to-php例如:

@errorreport = /usr/bin/php /opt/app/deweb/web/EDI/Microsoft/reports.php;