Php Cronjob电子邮件“;命令失败,退出状态为“1”;当没有什么失败的时候
我最近一直在尝试cronjobs,并将其设置为: crontab:Php Cronjob电子邮件“;命令失败,退出状态为“1”;当没有什么失败的时候,php,email,cron,scheduled-tasks,crontab,Php,Email,Cron,Scheduled Tasks,Crontab,我最近一直在尝试cronjobs,并将其设置为: crontab: SHELL=/bin/sh MAILTO=me@me.com 26 11 * * * wget http://diruser:pass@domain.com/path/to/file.php 在php文件中,它运行的是一个SQL查询,目前只运行一个insert。这可以很好地运行插入,但当我看到它生成的电子邮件时,它会说: 电邮: 工作组: 命令失败,退出状态为1 我只是想知道是否有人知道它为什么会返回失败的命令?它显然没有失败
SHELL=/bin/sh
MAILTO=me@me.com
26 11 * * * wget http://diruser:pass@domain.com/path/to/file.php
在php文件中,它运行的是一个SQL查询,目前只运行一个insert。这可以很好地运行插入,但当我看到它生成的电子邮件时,它会说:
电邮:
工作组:
命令失败,退出状态为1
我只是想知道是否有人知道它为什么会返回失败的命令?它显然没有失败,但电子邮件的回复让我觉得我在什么地方做错了什么
此外,将cron调用的文件放在受密码保护的目录中是一种良好的做法,还是有更好的方法(例如检查请求ip是否是服务器的ip或其他内容)。我不知道产生错误的原因。但在我看来,通过wget调用PHP是不好的做法。您可以编写无法通过Apache(或Nginx或其他HTTP服务器)访问的PHP脚本,并且可以从cron调用该脚本:
SHELL=/bin/sh
MAILTO=me@me.com
26 11 * * * php /path/to/file.php
更好的方法是像单独的用户一样调用它,例如,
phpuser
,它只拥有脚本所需的权限 我不知道为什么会产生错误。但在我看来,通过wget调用PHP是不好的做法。您可以编写无法通过Apache(或Nginx或其他HTTP服务器)访问的PHP脚本,并且可以从cron调用该脚本:
SHELL=/bin/sh
MAILTO=me@me.com
26 11 * * * php /path/to/file.php
更好的方法是像单独的用户一样调用它,例如,
phpuser
,它只拥有脚本所需的权限 最有可能的是,wget
抛出错误,因为它无法保存结果。默认情况下,wget
将尝试将结果存储在磁盘上。在cron作业中运行时,工作目录(通常)/
。作为用户,您可能无法在那里存储文件
相反,请告诉wget
删除结果,或将其传送到/dev/null
。例如:
wget -O - -q http://diruser:pass@domain.com/path/to/file.php
很可能,
wget
会抛出错误,因为它无法保存结果。默认情况下,wget
将尝试将结果存储在磁盘上。在cron作业中运行时,工作目录(通常)/
。作为用户,您可能无法在那里存储文件
相反,请告诉wget
删除结果,或将其传送到/dev/null
。例如:
wget -O - -q http://diruser:pass@domain.com/path/to/file.php
尝试:
或
一,。crontab需要命令的完整路径才能运行它
二,wget
将尝试保存文件.php
的响应,如果它没有必要的权限,它将失败。这就是为什么您应该将输出重定向到其他地方,而不是文件,这是由/dev/null
完成的
一个程序有三个标准的输入和输出源,即STDIN
,STDOUT
,STDERR
,分别编号为0
,1
,2
当您使用大于
的值重定向输出时,如果您没有明确提到要重定向的值,默认值为STDOUT
(1)。因此,我们将把所有STDOUT
输出重定向到null/trash,并将所有错误2>&1
重定向到STDOUT
,这反过来又会变成trash,如前面的规则所示。尝试:
或
一,。crontab需要命令的完整路径才能运行它
二,wget
将尝试保存文件.php
的响应,如果它没有必要的权限,它将失败。这就是为什么您应该将输出重定向到其他地方,而不是文件,这是由/dev/null
完成的
一个程序有三个标准的输入和输出源,即STDIN
,STDOUT
,STDERR
,分别编号为0
,1
,2
当您使用大于
的值重定向输出时,如果您没有明确提到要重定向的值,默认值为STDOUT
(1)。因此,我们将把所有的STDOUT
输出重定向到null/trash,将所有的错误2>&1
重定向到STDOUT
,这反过来又会变成trash,如前一条规则所示。谢谢,这就是我所需要的!一个问题是,第二个-for是什么?-O
表示需要重定向输出<代码>-表示它被重定向到STDOUT
-q
确保STDOUT
和STDERR
被重定向到/dev/null
。谢谢,这是我所需要的!一个问题是,第二个-for是什么?-O
表示需要重定向输出<代码>-表示它被重定向到STDOUT
-q
确保将STDOUT
和STDERR
重定向到/dev/null
。这可能是由于php.ini不同或php路径错误(不在sys路径中),因此try/usr/local/bin/phpit可能是由于php.ini不同或php路径错误(不在sys路径中)所以试试/usr/local/bin/php