【发布时间】:2019-02-27 02:47:59
【问题描述】:
我制作了一个执行 docker 命令转储 MySQL 数据库的 bash 脚本:
dump_db.sh
#!/bin/bash
time=$( date +%Y%m%d%H%M )
currdir=$( pwd )
cat $currdir/container_list | while read container; do
echo "" | docker exec -i $container mysqldump -u <user> -p<password> <dbname> > $currdir/$container-$time.sql
done
如果我尝试手动运行脚本,一切正常,但如果我使用cron,则脚本不会执行。
我的 crontab 是:
PATH=<same environment>
26 17 * * * /bin/sh /path/to/script/dump_db.sh
如您所见,我也尝试导出 PATH(并通过 crontab 中的 env 命令检查它),但没有。
我也尝试过这些行
26 17 * * * /bin/bash /path/to/script/dump_db.sh
26 17 * * * /path/to/script/dump_db.sh
此外,还有一个简单的 bash 脚本,如下所示:
#!/bin/bash
touch test_touch.txt
不起作用,而通过cron 的简单touch 命令可以。
我哪里错了?
【问题讨论】:
-
pwd回显当前路径(不是脚本所在的路径,而是当前用户所在的路径)。尝试前往 rootcd /并手动运行您的脚本/bin/sh /path/to/script/dump_db.sh。我想你会发现它不起作用,因为pwd将是/并且/container_list不是那个级别的目录,所以没有什么可以迭代的。脚本运行良好,只是没有做任何事情。 -
你为什么使用
/bin/sh来执行一个有bashshebang的脚本? -
@JNevill 你是我的救星。我为这个错误感到有点羞耻 -.-' ,顺便说一句......谢谢!如果您发布答案,我会将其标记为正确。