无法从 crontab 执行命令?
我想每天 16:00 更新数据库中的一些内容。
所以我使用 crontab 执行命令来运行我的 file.php 来运行更新。当我在 bash 中执行命令时它工作得很好,但是 crontab 有问题。
crontab:
00 16 * * * ./etc/cron.daily/maj_cat
maj_cat
php var/www/dev/update.php
谢谢!
I want to update some stuff in my database everyday at 16:00.
So I use crontab which execute command which run my file.php which run the update. It works perfectly when I execute the command in the bash but There is a problem with the crontab.
crontab:
00 16 * * * ./etc/cron.daily/maj_cat
maj_cat
php var/www/dev/update.php
Thanks!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
./etc/cron.daily/maj_cat 是相对路径,var/www/dev/update.php 也是相对路径,尝试:
和 maj_cat:
你可以这样做:
./etc/cron.daily/maj_cat is a relative path, and var/www/dev/update.php too, try:
and maj_cat:
To you can do:
您需要使用 PHP 的完整路径,
请输入:
whereis php
通常 PHP 驻留在 /usr/bin/php 中,
结果是:
/usr/bin/php /var/www/dev/update.php
我发现通过输出到文件来测试 crontab 是否正在执行很有用,这样你就知道 cron 实际上正在执行,例如:
/usr/ bin/php /var/www/dev/update.php >正如
我上面所示,您可能最好也在“var”之前添加一个正斜杠。
You will want to use the full path to PHP,
type in:
whereis php
typically PHP resides at /usr/bin/php
resulting in:
/usr/bin/php /var/www/dev/update.php
I find it useful to test a crontab is being executed by outputting to a file, so you know that the cron is actually being executed, something like:
/usr/bin/php /var/www/dev/update.php > output.txt
You will probably be better off putting a forward slash before "var" too as I've shown above.
crondeaemon 可能不使用手动设置时设置的 PATH 变量。
确保 php 在路径中(在 crontab 的头部)。
否则,您可以尝试在脚本中使用绝对路径。
probably the crondeaemon does not use the PATH variable that is set when you do it by hand.
Be sure that php is in the path (in the head of your crontab).
Otherwise you could try using absolut paths in your script.
Cron 在运行 cronjobs 时使用默认配置文件,该配置文件可能具有与您登录时使用的不同的 PATH 变量。您可以在 cronjob 的开头加载您自己的配置文件,以确保 cronjob 的环境与您登录的环境匹配。
您可以通过以下方式加载您的个人资料:
Cron uses a default profile when it runs cronjobs, which will likely have a different PATH variable than what you use when logged in. You can load your own profile at the beginning of the cronjob, to ensure that the cronjob's environment matches your logged in environment.
You can load your profile in this way: