早上好,我在我的ubunut服务器上写入一个脚本,检查数据库的某些值,如果条件为真,发送一些电子邮件。 如果我启动浏览器的脚本,如:
http://www.my_site.com/reports/generate.php
这工作,邮件到达。
如果进入我的crontab,我把这行写入文件/ etc / crontab:
0 12 * * * root php /var/www/reports/generate.php
这不起作用,邮件没有到达,价值是相同的。 我检查path是正确的,我给这个文件777权限,但不能在cron中工作。
有人能解释我为什么在克朗deosn't工作?
这个脚本大概需要5分钟才能结束。
这是syslog.log脚本
Jun 17 12:00:03 site /USR/SBIN/CRON[5352]: (root) CMD ( php /var/www/reports/generate.php) Jun 17 12:00:07 site postfix/pickup[2834]: 10546128001: uid=0 from=<root> Jun 17 12:00:07 site postfix/cleanup[5381]: 10546128001: message-id=<[email protected]> Jun 17 12:00:07 site postfix/qmgr[3259]: 10546128001: from=<[email protected]>, size=941, nrcpt=1 (queue active) Jun 17 12:00:08 site postfix/local[5384]: warning: dict_nis_init: NIS domain name not set - NIS lookups disabled Jun 17 12:00:08 site postfix/local[5384]: 10546128001: to=<[email protected]>, orig_to=<root>, relay=local, delay=2, $ Jun 17 12:00:08 site postfix/cleanup[5381]: 438CD128002: message-id=<[email protected]> Jun 17 12:00:08 site postfix/qmgr[3259]: 438CD128002: from=<>, size=2759, nrcpt=1 (queue active) Jun 17 12:00:08 site postfix/bounce[5386]: 10546128001: sender non-delivery notification: 438CD128002 Jun 17 12:00:08 site postfix/qmgr[3259]: 10546128001: removed Jun 17 12:00:08 site postfix/local[5384]: 438CD128002: to=<[email protected]>, orig_to=<[email protected]>, re$ Jun 17 12:00:08 site postfix/qmgr[3259]: 438CD128002: removed Jun 17 12:03:24 site kernel: Shorewall:net2fw:DROP:IN=eth0 OUT= MAC=00:16:3e:70:a5:ad:00:30:48:56:76:d3:08:00 SRC=122.228.129.25$ Jun 17 12:09:03 site /USR/SBIN/CRON[6104]: (root) CMD ( [ -x /usr/lib/php5/maxlifetime ] && [ -d /var/lib/php5 ] && find /var/l$ Jun 17 12:13:13 site kernel: Shorewall:net2fw:DROP:IN=eth0 OUT= MAC=00:16:3e:70:a5:ad:00:30:48:56:76:d3:08:00 SRC=61.188.37.237 $ Jun 17 12:15:32 site postfix/pickup[2834]: 2B3B1128001: uid=33 from=<www-data>
————————- 编辑 ———————
我在这种模式下更改文件crontab:
0 13 * * * root php /usr/bin/php -f /var/www/reports/generate.php 1>/dev/null 2>&1
不起作用,这是新的syslog.log
Jun 17 13:00:03 site /USR/SBIN/CRON[9886]: (root) CMD ( php /usr/bin/php -f /var/www/reports/generate.php $ Jun 17 13:01:19 site kernel: Shorewall:net2fw:DROP:IN=eth0 OUT= MAC=00:16:3e:70:a5:ad:00:30:48:56:76:d3:08:00 SRC=122.141.177.11$ Jun 17 13:09:02 site /USR/SBIN/CRON[10624]: (root) CMD ( [ -x /usr/lib/php5/maxlifetime ] && [ -d /var/lib/php5 ] && find /var/$ Jun 17 13:17:02 site /USR/SBIN/CRON[11246]: (root) CMD ( cd / && run-parts --report /etc/cron.hourly 1>/dev/null 2>&1)
您必须编写php可执行文件的完整path(也许是/ usr / bin / php):
0 12 * * * root /usr/bin/php -f /var/www/reports/generate.php
-f参数不是强制性的,但有助于phpparsing器。
编辑:你在/etc/cron.{d,每小时,每天,每周,每月}目录下写入的文件中必须使用“root”用户,但是如果使用“旧”crontab(crontab -e)用户始终是root用户,并不是必需的。 检查“/ var / log / cron” “/ var / log / syslog”文件以发现真正的错误。
仅供参考:如果您不想在crontab中运行PHP,则可以在脚本中始终指向PHP,方法如下:
#!/ usr / bin / php -q
到脚本的第一行。 这意味着脚本必须在PHP下运行,并且不需要在实际脚本之前将PHP命令添加到crontab。
上面实际上也是一个很好的解决scheme,当你需要列出/观察正在进行的系统进程时。 如果您在脚本前面使用PHP命令,那么进程列表只会显示脚本的名称,而不仅仅是脚本的名称。
另外,如果你想让自己从脚本接收到执行的数据到邮箱(通常是根目录),你可能需要在脚本之后添加> / dev / null 2>&1 。
在你的crontab行改变行
0 12 * * * root php /var/www/reports/generate.php
至
0 12 * * * root /usr/bin/php /var/www/reports/generate.php
也许如果你不在crontab文件中定义php的path,脚本就不能运行。 要检查脚本运行之前是否有问题,可以尝试使用tail -f / var / log / syslog 。 -f选项在屏幕上实时写入所有内容。
所以你可以检查一下你的问题。 在这个页面上有关于为什么一个cron作业不运行的原因。 克龙不运行