为什么工作脚本不作为 cron 作业执行?

Bil*_*net 5 bash scripts cron

我写了一个脚本来备份数据库。当我直接执行它时,它起作用了。我试图让它成为一个 cron 工作,当它运行时(我检查过service status cron),它似乎默默地失败了。

这是脚本:

#!/bin/bash
echo "Starting mongo backup"
mkdir /home/ubuntu/backups
docker exec -it mongodb mongodump --archive=/root/mongodump.gz --gzip
docker cp mongodb:/root/mongodump.gz /home/ubuntu/backups/mongodump_$(date +%Y-%m-%d_%H-%M-%S).gz
echo "Mongo dump complete"
printf "[default]\naccess_key=\nsecret_key=\nsecurity_token=\n" > ~/.s3cfg
s3cmd put /home/ubuntu/backups/* s3://my-backup-bucket/
echo "Copy to S3 complete"
rm /home/ubuntu/backups/* -r
echo "Files cleaned"
Run Code Online (Sandbox Code Playgroud)

我只使用了绝对路径(编辑:是的,实际上我没有),没有环境变量,没有未转义的 %。我不知道我错过了什么。

pa4*_*080 5

一个可能的原因是您没有使用命令的绝对路径,并且您的某些命令默认不位于/usr/bin/bin不属于$PATHCron 中的 envvar。

你可以找到位于每个可执行的命令在命令的地方which,例如which s3cmd。然后,您可以将带有绝对路径的命令放入脚本中。

另一种方法是$PATH在您的脚本中或在以下内容中分配新值crontab为什么 crontab 脚本不起作用?

您可以将 Cronjob 的输出重定向到文件以调试问题所在。为此,以这种方式修改您的工作:

* * * * * /path/to/the-script >/path/to/log-file 2>&1
Run Code Online (Sandbox Code Playgroud)

此外,我更喜欢在脚本中使用$HOME而不是使用~