Crontab 未在 docker 中执行命令

Crontab not executing commands in docker

我正在构建一个网络应用程序,教师提供课程,客户购买。 我需要自动化来更改课程状态。几乎只是检查一些条件,例如当前时间大于截止时间时关闭课程。 我正在使用 php-symfony,一切都是 docker 化的。因此,要访问我的 php 容器,我必须启动 docker-compose 并键入 docker-compose exec php bash。嗯,在 php 中,我有一个命令,我可以手动 运行 检查所有课程状态,如果满足条件,可能会对数据库进行一些更改。但是为了自动化这个过程,我决定使用 crontabs。我已经在 cmd 中测试了命令是否我有所有权限来做这样的事情并且它有效,所以我只是把它放入 crontab 每分钟执行一次。

* * * * * cd /home/martin/PhpstormProjects/bp_project && sudo docker-compose exec php php bin/console courses-check >/dev/null 2>&1

第一部分进入项目文件夹,第二部分打开 docker 容器和 运行s 检查课程状态的命令。在 cmd 中,整个命令都有效。甚至在应该是默认 crontab 日志文件的 /var/log/syslog 中,它也给了我这个输出:

May  8 16:42:01 martin-ubuntu CRON[1032921]: (martin) CMD (cd /home/martin/PhpstormProjects/bp_project && sudo docker-compose exec php php bin/console courses-check >/dev/null 2>&1)

我没有看到任何可见的错误,但在数据库中查看时,它没有在应该更改的时候更改任何值。

所以我在想它可能与 docker 有关? 我试图在 crontab 中添加第二个命令,即:

* * * * * cd /home && echo "hi" > a.txt

并且它每分钟都会将“hi”保存到给定的文件中。 因此,虽然第一个命令不起作用,但这个命令可以。任何想法隐藏的问题在哪里?

将你的 crontab 改成这个

* * * * * sudo docker-compose -f /home/martin/PhpstormProjects/bp_project/docker-compose.yml run --rm php sh -c ' bin/console courses-check' >/dev/null 2>&1