业务需要在docker里面使用crontab,安装好crontab之后。我在想怎样不进入容器就能自己添加或者修改cron任务。因为我的docker环境都是通过docker-compose配置的,首先想到的方法是通过dokcer-compose里面的volumes映射cron任务文件则crontab -e的操作对象文件。路径是 /var/spool/cron/crontabs以用户名命名的文件。映射是成功的,这个没任何毛病。重启cron之后发现crontab任务没有执行成功。于是想看日志。特么找了很久都找不到日志(不知道为什么会没有日志文件,我在宿主机同样有装crontab,宿主机是有log日志文件的)。

      于是装了个vim,于是尝试直接通过crontab -e 新增一个新的任务文件,居然成功了,比对了映射进来的文件和crontab -e创建的文件,完全一模一样啊。于是猜测是不是crontab -e的过程中系统会做一些操作之类的。后来一番折腾发现并不是,crontab仅仅只是读取该任务文件而已。于是再认真比对了下。毅然发现两个文件权限是不一样的,容器里面创建的文件是600权限,宿主机映射过来的文件是644权限。简直坑爹,第一次遇到权限低的能执行成功,权限高的反而执行失败?为了验证这个问题,于是把宿主机映射的文件修改为600权限。果然就是这个问题。我猜测是不是crontab有做什么权限的判断之类的,如果不是600权限则不允许执行这样?先记录下来,有时间再研究下这个问题。了解的网友也可以评论告诉我。

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐