【问题标题】:perl script is not running through cronperl 脚本没有通过 cron 运行
【发布时间】:2014-06-20 20:13:35
【问题描述】:

我需要你的帮助。 我为 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 的超级用户帐户下,我的登录名有权在此超级用户帐户下进行编辑。 我正在使用命令编辑这个 cron 选项卡 :: sudo -u webserv crontab -e

【问题讨论】:

  • 去掉 use Net::FTPuse File::Copyuse POSIX 因为你显然没有使用它们。输入 PHP 的完整路径。
  • 是什么让你认为这是 Perl 脚本而不是 PHP 脚本?
  • 为什么不直接调用PHP脚本呢?
  • 这个脚本有什么意义?为什么不直接从 cron 运行 PHP 脚本?
  • 大家好,感谢您的建议。我将 PHP 直接保存到 Cron 并且它工作正常。我为什么要使用 Perl 是通过一个程序运行多个 PHP 脚本。目前以上建议解决了我的问题。

标签: php perl unix crontab


【解决方案1】:

我会检查以下内容:

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

【讨论】:

    【解决方案2】:

    我发现自己处于同样的境地。在试图找出原因之后,我几乎可以确定发生这种情况的原因。运行脚本时,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;

    【讨论】:

      猜你喜欢
      • 2019-07-23
      • 2012-03-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-11
      • 2016-10-01
      • 2011-03-27
      • 1970-01-01
      相关资源
      最近更新 更多