如何在Docker容器中让schedule:run与systemd协同工作?
给Lumen配置Systemd定时任务(Ubuntu Xenial Docker环境)
最近我在基于ubuntu:xenial的Docker镜像中搭建Lumen的定时任务体系,用systemd的service和timer单元来实现自动调度,以下是我的具体配置:
1. 编写Service单元文件
路径:/etc/systemd/system/lumen-cron.service
这个文件负责定义执行Lumen定时任务的具体命令和运行权限:
[Unit] Description=Run lumen cron tasks After=network.target [Service] User=root ExecStart=/usr/bin/php /var/www/web/artisan schedule:run
2. 编写Timer单元文件
路径:/etc/systemd/system/lumen-cron.timer
这个文件用来设置任务的调度规则,我配置成启动后1分钟开始执行,之后每隔1分钟运行一次:
[Unit] Description=Run lumen timed tasks [Timer] OnBootSec=1min OnUnitActiveSec=1m [Install] WantedBy=timers.target
3. 配置容器启动自动启用
在Docker镜像的启动脚本里,我加入了启用该定时任务的命令,确保容器启动后定时任务自动生效:
systemctl enable lumen-cron
容器内验证任务状态的常用命令
如果登录容器后想确认任务是否正常运行,可以用这些命令:
- 查看timer的调度状态:
systemctl list-timers lumen-cron.timer - 查看service的运行日志:
journalctl -u lumen-cron.service - 手动触发一次任务测试:
systemctl start lumen-cron.service
内容的提问来源于stack exchange,提问作者Moak
相关产品推荐
相关产品推荐

