我需要你的帮助。 我为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
答案 0 :(得分:0)
我会检查以下内容:
sudo -u webserv perl reports.pl
运行?如果没有,请修复webserv
用户(权限或其他)的问题,它也应该通过cron工作。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
;