我已经安装了 Mautic(电子邮件程序)。它需要 3 个 cronjob 才能正常运行。
php /var/www/mydomainname/htdocs/app/console mautic:segments:update
php /var/www/mydomainname/htdocs/app/console mautic:campaigns:update
php /var/www/mydomainname/htdocs/app/console mautic:campaigns:trigger
我在 Ubuntu 18.04 上并且使用 PHP 7.0x。
当我执行sudo php /var/www/mydomainname/htdocs/app/console mautic:campaigns:trigger
或上面列出的任何其他 3 项时,它们都可以正常工作。我得到了正确的输出并且它被执行了。
但是,当我在 crontab 中输入相同的命令时,什么也没有发生。
我什么都试过了。在根 crontab 中、在 www-data crontab 中、在我的用户 crontab 中,使用 PHP7.0 命令的绝对路径(在 中/usr/bin/php7.0
)。甚至尝试过先更改php
目录等等。
例如:
* * * * * /usr/bin/php7.0 /var/www/mydomainname/htdocs/app/console mautic:segments:update
或者:
* * * * * sudo /usr/bin/php7.0 /var/www/mydomainname/htdocs/app/console mautic:segments:update
或者:
* * * * * cd /usr/bin sudo php7.0 /var/www/mydomainname/htdocs/app/console mautic:segments:update
使用 crontab 时没有什么效果。
有人知道为什么吗?
答案1
从詹斯·A·科赫的回答到CronJob 未运行(经过抢) 在堆栈溢出:
以下是调试未运行的 cronjobs 的清单指南:
- Cron 守护进程是否正在运行?
- 运行
ps ax | grep cron
并查找 cron。- Debian:
service cron start
或者service cron restart
- cron 正在工作吗?
* * * * * /bin/echo "cron works" >> /tmp/file
- 语法正确吗?见下文。
- 显然,您需要对要将输出重定向到的文件具有写权限。
/tmp
当前不存在的唯一文件名应始终可写。- 该命令是独立工作吗?
- 通过在 CLI 上进行试运行来检查脚本是否有错误
- 测试命令时,请以您正在编辑其 crontab 的用户身份进行测试,该用户可能不是您的登录名或 root
- cron 可以运行你的工作吗?
- 检查
/var/log/cron.log
或/var/log/messages
是否存在错误。- 乌本图:
grep CRON /var/log/syslog
- 红帽:
/var/log/cron
- 检查权限
- 在命令上设置可执行标志:
chmod +x /var/www/app/cron/do-stuff.php
- 如果将命令的输出重定向到文件,请验证您是否有权写入该文件/目录
- 检查路径
- 查看 she-bangs / hashbangs 线路
- 不要依赖 PATH 之类的环境变量,因为它们的值在 cron 下和在交互式会话下可能不一样
- 调试时不要抑制输出
- 常用的是这种抑制:
30 1 * * * command > /dev/null 2>&1
- 通过完全删除来重新启用标准输出或标准错误消息输出
>/dev/null 2>&1
;或者重定向到您具有写访问权限的位置的文件:>>cron.out 2>&1
将把标准输出和标准错误附加到cron.out
调用用户的主目录中。还是不起作用?哎呀!
- 提高 cron 调试级别
- Debian
- 在
/etc/default/cron
- 放
EXTRA_OPTS="-L 2"
service cron restart
tail -f /var/log/syslog
查看执行的脚本- Ubuntu
- 在
/etc/rsyslog.d/50-default.conf
- 添加或注释掉行
cron.crit /var/log/cron.log
- 重新加载记录器
sudo /etc/init.d/rsyslog reload
- 重新运行 cron
- 打开
/var/log/cron.log
并查找详细的错误输出- 提醒:调试完成后,请停用日志级别
- 运行 cron 并再次检查日志文件
Cronjob 语法
# Minute Hour Day of Month Month Day of Week User Command # (0-59) (0-23) (1-31) (1-12 or Jan-Dec) (0-6 or Sun-Sat) 0 2 * * * root /usr/bin/find
此语法是仅有的对
root
用户来说是正确的。常规用户crontab
语法没有用户字段(普通用户不允许像其他用户一样运行代码);# Minute Hour Day of Month Month Day of Week Command # (0-59) (0-23) (1-31) (1-12 or Jan-Dec) (0-6 or Sun-Sat) 0 2 * * * /usr/bin/find
Crontab 命令
crontab -l
- 列出所有用户的 cron 任务。
crontab -e
,针对特定用户:crontab -e -u agentsmith
- 启动 crontab 文件的编辑会话。
- 当退出编辑器时,修改后的crontab会自动安装。
crontab -r
- 从 cron 假脱机程序中删除 crontab 条目,但不从 crontab 文件中删除。