我有一个perl脚本(与wp同步美味):
我唯一能想到的是它错误地读取了配置文件但是...它是通过完整路径定义的(我认为)。
我将配置文件读作:
my $config = Config::Simple->import_from('/home/12345/data/scripts/delicious/wpds.ini',
\my %config);
(我在mediatemple上托管)
有人有线索吗?
更新1 :HERE是完整代码:http://plugins.svn.wordpress.org/wordpress-23-compatible-wordpress-delicious-daily-synchronization-script/trunk/(但我已将上述路径添加到配置文件位置作为差异)
更新2 :在https://forums.mediatemple.net/viewtopic.php?pid=31563#p31563
上交叉发布更新3 :完整路径完成了解决,解决了
答案 0 :(得分:7)
cron作业和从shell运行的作业之间的区别是“环境”。主要区别在于您的配置文件等不是针对cron作业运行的,因此您在普通shell环境中设置的任何环境变量在cron环境中都没有设置相同 - 没有对PATH的扩展,没有环境变量标识美味和/或WP是托管等。
建议:创建一个仅将环境报告给已知文件的cron作业:
env > /home/27632/tmp/env.27632
然后查看您自己的shell环境中设置的内容。机会是,这将揭示麻烦。
如果不这样做,其他环境差异就是cron作业没有终端,并且输入和输出都有/ dev / null - 所以交互式的东西不能正常工作。
答案 1 :(得分:4)
似乎问题不在于运行perl,而是找到Config库
你应该尝试:
perl -e“print @INC”
在cron中运行类似的perl脚本,并读取输出
它们可能不同
答案 2 :(得分:2)
我建议查看我对How to simulate the environment cron executes a script with?
的回答这是类似乔纳森的答案,但更进一步。
答案 3 :(得分:1)
根据您的crontab,根据您的安装,问题可能是“perl”。正如其他人所指出的那样,环境,特别是$PATH
变量,对于cron来说是不同的。 perl可能不在路径中,因此您需要在cron命令中将完整路径放入perl。
您可以使用命令$ type perl
答案 4 :(得分:0)
我遇到了同样的问题......
Perl脚本有效但不能通过CRON =>错误:" perl:找不到命令"
...从Plesk 12.0更新到Plesk 12.5之后。但现有的答案对我没有多大帮助。
花了一些时间,但我在Odin论坛找到了这个帖子,它帮助了我:https://talk.plesk.com/threads/scheduled-tasks-always-fail.331821/
他们建议如下:
/usr/local/psa/bin/server_pref -u -crontab-secure-shell ""
在/ var / spool / cron / crontabs文件中删除行:
SHELL="/opt/psa/bin/chrootsh"
之后,我的cron作业没有任何错误。
(Ubuntu 14.04 with Plesk 12.5)
答案 5 :(得分:-1)
If the perl script runs fine manually, but not from crontab, then
there is some environment path needed by the some package that is not
getting through `cron`. Run your command as follows:
suppose your cron entry like:
* 13 * * * /usr/bin/perl /home/username/public_html/cron.pl >/dev/null 2>&1
env - /home/username/public_html/cron.pl
The output will show you the missing package. export that package path in
$PATH variables