基于Debian镜像的Docker,crontab无法正常运行的配置笔记

本文分享了在基于Debian的Docker环境中配置crontab的实战经验,解决了包括环境变量加载、相对路径问题及命令执行失败等常见问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近弄了一天基于Debian的docker,耗费了大量时间调试crontab,一直无法运行,多次查询debian官方文档和stack overflow终于找到解决方案,现将弯路记录如下。

 

和之前alpine和centOS的docker不同,debian使用另一种cron机制,其中要点如下:

1. docker的container环境变量无法带入cron,也不能使用alpine的. /etc/profile进行手工加载,需要使用cat命令进行链接。

2. cron脚本中,相对路径经常出现not found的情况,cron脚本中运行的.sh脚本也一样,具体原因未查明,但是使用绝对路径,即可以。

3. 直接将文件拷贝到/etc/cron.d下面即可,无需再像alpine一样cat到/var/spool/crontab/root下运行。

 

简要记录遇到问题:

1. cron文件读取异常,使用rsyslog查看cron系统日志,发现是每行结尾多了^M字符,使用dos2unix工具重新转换,解决。

2. 命令不存在 command not found,将路径修改为绝对路径,修改如下。

sh /usr/local/bin/send_mail.sh >> /build/logs/cron_stat.log 2>&1
/bin/bash /usr/local/bin/send_mail.sh >> /build/logs/cron_stat.log 2>&1

其中/usr/local/bin/send_mail.sh脚本修改

#!/bin/sh
/usr/local/bin/python /build/monitor_punish.py
#!/bin/bash
cd /build
/usr/local/bin/python monitor_punish.py

3. 修改完毕后python可以运行了,但是报环境变量不存在,但是export和env都有内容,需要提前把内容cat到一个文件中,运行程序时再读文件。

相关文章http://dev.im-bot.com/docker-cron/

Dockerfile修改以下代码:

CMD env > /root/env.txt && cron && python server.py

cron文件修改如下:

*/1 * * * * root env - `cat /root/env.txt` /bin/bash /usr/local/bin/intel_ir_send_punish_mail.sh >> /build/logs/cron_stat.log 2>&1

至此,文件不存在,命令不存在,环境变量不存在,均解决。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值