我有以下文件execute-backup-from-container.sh
。该文件的内容是:
#!/bin/bash
FILE=minime.sql.`date +"%Y%m%d".gz`
CONTAINER='mysql_01'
SCRIPT_ON_CONTAINER='/container-mysql-dump.sh'
${OUTPUT}=$(docker exec ${CONTAINER} /$SCRIPT_ON_CONTAINER)
echo "=============="
echo "$CONTAINER:/$FILE"
echo "=============="
docker cp "$CONTAINER:/$FILE" backup-data/
当我运行时,crontab -e
我输入以下内容:
0 5 * * 1 /home/me/projects/execute-backup-from-container.sh
这意味着应该execute-backup-from-container.sh
每天凌晨 5:00 执行。
问题是脚本根本没有执行。
那么到底是什么问题呢?为什么不执行呢?
答案1
与您的条目相对应的 cron 字段的含义是:
minute: 0
hour: 5
day of month: *
month: *
day of week: 1
command: /home/me/projects/execute-backup-from-container.sh
其英文翻译为:星期一早上 5 点(每月的任何一天,任何月份)。
如果你想让它被执行:
每天凌晨 5:00
那么您希望第五个字段是*
:
0 5 * * * /home/me/projects/execute-backup-from-container.sh
答案2
您是否检查该文件是否设置为可执行?以下是将脚本标记为可执行的示例:
$ ls -l test.sh
-rw-r--r-- 1 ahill ahill 0 Mar 23 19:30 test.sh
$ chmod +x test.sh
$ ls -l test.sh
-rwxr-xr-x 1 ahill ahill 0 Mar 23 19:30 test.sh
接下来要检查的是环境。默认情况下,cron 作业不继承任何环境。这里讨论“修复”:
如何使用现有环境变量运行 cron 命令?
环境很重要的原因之一是 cron 甚至可能找不到 bash!看: https://www.digitalocean.com/community/questions/why-is-cron-not-running-my-sh-script
如果您仍然无法弄清楚,我会做一个测试:将您的 cron 作业更改为:
0 5 * * * /home/me/projects/execute-backup-from-container.sh
到:
0 5 * * * /home/me/projects/execute-backup-from-container.sh >> ~/script_errors.log 2>&1
将会发生什么:下次 cron 启动作业时,产生的错误消息将转储到文本文件 script_errors.log 中。 (将 script_errors.log 文件的路径更改为任何看起来合适的路径,但确保该路径存在,尽管该文件不需要。)
我还注意到OP中的一些内容可能是真正的问题:“容器”这个词。如果脚本位于 Docker 容器内,那么这可能是解决方案:
https://www.ekito.fr/people/run-a-cron-job-with-docker/
答案3
考虑到所有答案后,最后一个问题在最后一行:
docker cp "$CONTAINER:/$FILE" backup-data/
最后一行应该是
docker cp "$CONTAINER:/$FILE" docker-projects/mysql/backup-data/
感谢大家的支持。