【问题标题】:Shell script works from command line but not from cronShell 脚本从命令行工作,但不能从 cron
【发布时间】:2020-09-05 12:01:48
【问题描述】:

我正在使用https://*.com/a/42955871/308851,它可以从命令行运行,但不能从 cron 运行。我什至尝试使用env -i 运行脚本,但它仍然有效。

#!/bin/bash
filename=$(date '+%Y-%m-%d').gz
docker exec -t elastic_db.1.$(docker service ps -f 'name=elastic_db.1' elastic_db -q --no-trunc | head -n1) mysqldump example |gzip -9 > /container/$filename
docker exec -t elastic_drupal.1.$(docker service ps -f 'name=elastic_drupal.1' elastic_drupal -q --no-trunc |head -n1) rclone --config /etc/rclone.conf move /app/$filename example:example/dump/

当从 cron 运行时,这会压缩一个 0 字节的文件,但在其他情况下工作得很好。我做错了什么?

【问题讨论】:

  • cron 作业在一个非常小的环境下运行,包括一个可能不包括docker 所在目录的PATH。我不认为env -i 完全模拟了这一点。尝试在您的 crontab 或脚本中显式设置 PATH。此外,每当 cron 作业出现问题时,请尝试使用 2>/tmp/cron-job.log 之类的内容捕获错误输出。

标签: bash cron


【解决方案1】:

Gordon Davisson 的评论是正确的:将 docker 更改为 /usr/bin/docker 有效。

【讨论】:

    最近更新 更多