我已经设置了一个 cron 来执行我的一个 php 脚本。但问题是 php 脚本根本没有执行,甚至连部分执行都没有。
这是我设置的 cron
45 23 * * * /usr/bin/php -q /var/www/myscript.php
我已经尝试过以下
- 我将 cron 从普通用户移除到 root 用户,仍然没有结果。
- 我使用以下方法更改了脚本的权限
chmod +x /var/www/myscript.php
whereis php
我使用了以下命令php: /usr/bin/php /usr/share/man/man1/php.1.gz
现在,我不知道还能做什么。请帮忙。
PS 我可以手动执行脚本并且它可以完美运行。
答案1
1. 正如man php
告诉我们的……
--no-header
-q Quiet-mode. Suppress HTTP header output (CGI only).
--file file
-f file Parse and execute file
-q
不做任何事物在 php-cli 模式下。正如其他人指出的那样,您需要-f
。
2. +x 不是必需的。
恢复方法如下:
chmod -x /var/www/myscript.php
3.whereis
将为您提供所有位置。如果您只想要二进制文件,请使用which php
。
$ which php
/usr/bin/php
答案2
我只是猜测一下,但放置脚本的路径不应该是
45 23 * * * /usr/bin/php /var/www/html/myscript.php
我还是 cron 的新手:)
答案3
请参阅man cron
Debian 特定的更改。引用:
> 如上所述,这些目录下的文件必须通过一些健全性检查,包括:可执行、由 root 拥有、不可由组或其他用户写入,并且如果是符号链接,则指向 root 拥有的文件。此外,文件名必须符合 run-parts 的文件名要求:它们必须完全由字母、数字组成,并且只能包含特殊符号下划线(“_”)和连字符(“-”)。任何不符合这些要求的文件都不会被 run-parts 执行。例如,任何包含点的文件都将被忽略。
答案4
正确的 crontab 行应该是:
45 23 * * * /usr/bin/php -f /var/www/myscript.php
注意-f
而不是-q
!