无法从 crontab 执行命令?

发布于 2024-11-15 23:44:59 字数 278 浏览 8 评论 0原文

我想每天 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

兰花执着 2024-11-22 23:44:59

./etc/cron.daily/maj_cat 是相对路径,var/www/dev/update.php 也是相对路径,尝试:

00 16 * * * /etc/cron.daily/maj_cat

和 maj_cat:

php /var/www/dev/update.php

你可以这样做:

00 16 * * * /usr/bin/env php /var/www/dev/update.php

./etc/cron.daily/maj_cat is a relative path, and var/www/dev/update.php too, try:

00 16 * * * /etc/cron.daily/maj_cat

and maj_cat:

php /var/www/dev/update.php

To you can do:

00 16 * * * /usr/bin/env php /var/www/dev/update.php
慕巷 2024-11-22 23:44:59

您需要使用 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.

北渚 2024-11-22 23:44:59

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.

清风疏影 2024-11-22 23:44:59

Cron 在运行 cronjobs 时使用默认配置文件,该配置文件可能具有与您登录时使用的不同的 PATH 变量。您可以在 cronjob 的开头加载您自己的配置文件,以确保 cronjob 的环境与您登录的环境匹配。

您可以通过以下方式加载您的个人资料:

00 16 * * * ~/.profile; ./etc/cron.daily/maj_cat

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:

00 16 * * * ~/.profile; ./etc/cron.daily/maj_cat
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文