Docker中Cron正常运行却持续报错/bin/sh: root: command not found如何解决?
解决Docker中CentOS7 Cron报错/bin/sh: root: command not found的问题
方案1:修改crontab文件格式(推荐)
你的crontab文件采用了系统级cron配置的格式(包含用户字段root),但你通过crontab /etc/cron.d/server-cron命令将其加载为用户级crontab,两种格式不兼容。
修改crontab文件内容,去掉用户字段root:
* * * * * echo "Hello world" >> /var/log/cron.log 2>&1
方案2:保留系统级配置,无需手动加载crontab
如果想保留带用户字段的系统级cron格式,只需删除Dockerfile中的RUN crontab /etc/cron.d/server-cron命令。因为/etc/cron.d/目录下的配置文件会被cron服务自动扫描加载,不需要手动执行crontab命令导入。
修改后的Dockerfile:
FROM centos:7 RUN yum -y install crontabs COPY --chmod=0644 dockerfiles/crontab /etc/cron.d/server-cron RUN touch /var/log/cron.log CMD crond && tail -f /var/log/cron.log
错误原因说明
- 系统级cron配置(如
/etc/cron.d/、/etc/crontab)的格式是:* * * * * 用户 命令,必须指定执行命令的用户。 - 用户级crontab(通过
crontab -e编辑或crontab命令导入的)格式是:* * * * * 命令,不需要指定用户——因为该crontab属于当前用户(这里是root),命令默认以该用户身份执行。
你之前的操作把系统级格式的配置导入到用户级crontab中,cron会把root当成要执行的命令,从而触发/bin/sh: root: command not found错误。
内容的提问来源于stack exchange,提问作者ReynierPM
相关产品推荐
相关产品推荐

