Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/email/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Cronjob电子邮件“;命令失败,退出状态为“1”;当没有什么失败的时候_Php_Email_Cron_Scheduled Tasks_Crontab - Fatal编程技术网

Php Cronjob电子邮件“;命令失败,退出状态为“1”;当没有什么失败的时候

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 我只是想知道是否有人知道它为什么会返回失败的命令?它显然没有失败

我最近一直在尝试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

我只是想知道是否有人知道它为什么会返回失败的命令?它显然没有失败,但电子邮件的回复让我觉得我在什么地方做错了什么


此外,将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