【问题标题】:Running a "docker run" command via crontab does not work通过 crontab 运行“docker run”命令不起作用
【发布时间】:2021-09-30 17:05:33
【问题描述】:

每分钟(用于测试)我正在运行一个 cronjob 来创建一个容器,在其中运行一个 nodejs 进程,然后也删除该容器。

它按常规命令运行,但通过 crontab 运行时无法产生任何结果或输出。

这是我的 crontab

*/1 * * * * sh /location_to_cron/cron.sh >> /location_to_cron/backup.log

这里是 cron shell 脚本的内容

CONTAINER_NAME="node_backup_repo"

echo "Creating Container to create backup, name: $CONTAINER_NAME"

docker run --name $CONTAINER_NAME -v /location_to_backup_dir:/app --dns="my_custom_dns" -w /app node:16 "backupscript.js" >> /location_to_cron/backup.log

echo "Removing container $CONTAINER_NAME"
docker rm $CONTAINER_NAME

echo "All done..."

Syslog 条目表明 crontab 正在以我的用户身份执行,这符合预期。这里有什么问题?

编辑: 修改的工作脚本 - 修复是添加到 docker 二进制文件的路径

CONTAINER_NAME="node_backup_repo"

echo "Creating Container to do Backup, name: $CONTAINER_NAME"

/snap/bin/docker run --name $CONTAINER_NAME -v /location_to_backup_dir:/app --dns="my_custom_dns" -w /app node:16 "backupscript.js" >> /location_to_cron/backup.log

echo "Removing container $CONTAINER_NAME"
/snap/bin/docker rm $CONTAINER_NAME

echo "All done..."

【问题讨论】:

  • 没有-it,标准输出将没有结果。
  • 它不应该是交互式的。但是它确实需要连接到 STDOUT 才能执行 cron 吗?
  • cron 不在乎,显然很高兴地运行它。但是如果没有我认为至少-t,你不会得到任何结果,但也许你也需要-i
  • 你可以cd /location_to_backup_dir; node backupscript.js 代替尝试运行 Docker 容器吗?

标签: docker ubuntu server cron


【解决方案1】:

使用这个:

*/1 * * * * sh /location_to_cron/cron.sh >> /location_to_cron/backup.log 2>&1

它可以将stdoutstderr发送到backup.log

【讨论】:

  • 不知道为什么这是downvotes,但它有所帮助。 crontab 无法找到 docker 二进制文件。使用/snap/bin/docker 作为命令的绝对路径有帮助,现在可以使用了。
猜你喜欢
  • 2023-03-09
  • 2018-12-18
  • 2015-10-24
  • 1970-01-01
  • 1970-01-01
  • 2020-09-10
  • 1970-01-01
  • 1970-01-01
  • 2018-09-05
相关资源
最近更新 更多