2013-07-09 67 views
0

首先,我:Perl的计划作业不起作用

sudo crontab -e -u adrian 

然后我补充一下:

* * * * * cd /home/adrian/app/; perl -I /home/adrian/app/lib/ script/db/log_to_db.pl 

这应该使每分钟运行该脚本。该脚本用新数据修改数据库。 所以我每分钟检查一次数据库。没有数据。 “上次更新”时间列也不会更改。我检查日志。此日志每分钟出现一次:

Jul 9 13:32:01 dev1 CROND[28658]: (adrian) CMD (cd /home/adrian/app/; perl -I /home/adrian/app/lib/ script/db/log_to_db.pl) 

看起来像一个成功的日志。但数据库不会更改,因此脚本没有运行。此外,如果我手动在我的命令行上执行该行:

cd /home/adrian/app/; perl -I /home/adrian/app/lib/ script/db/log_to_db.pl 

数据库更改并且脚本运行没有问题!我在这里做错了什么?

+0

的cron通常将邮件发送到该账户持有人,当一个作业运行失败。你有没有检查消息? –

+0

@Karthik T是的,因为“-I/home/adrian/app/lib /”告诉库在哪里,然后“script/db/log_to_db.pl”告诉要运行的脚本路径。 – ado

+0

@adriancdperu啊我的坏,跳过'-I'。 –

回答

2

由于命令运行在命令行罚款,这个问题是最有可能缺少一些环境变量(一个或多个)。不要直接从cron作业运行perl,而是运行一个包装脚本来设置环境,然后运行perl。像这样的东西应该工作(假设你登录使用bash —根据需要进行调整):

#!/bin/bash 

source /home/adrian/.bash_profile 
cd /home/adrian/app/ 
perl -I /home/adrian/app/lib/ script/db/log_to_db.pl 
+0

感谢这看起来像一个不错的主意我只是想它现在 – ado

+0

确认,您的方法进行得很顺利!谢谢 – ado

+0

'source cd'?这是故意的吗? – innaM