【问题标题】:Cron and Bash script: impossible to executeCron 和 Bash 脚本:无法执行
【发布时间】: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 回显当前路径(不是脚本所在的路径,而是当前用户所在的路径)。尝试前往 root cd / 并手动运行您的脚本 /bin/sh /path/to/script/dump_db.sh。我想你会发现它不起作用,因为pwd 将是/ 并且/container_list 不是那个级别的目录,所以没有什么可以迭代的。脚本运行良好,只是没有做任何事情。
  • 你为什么使用/bin/sh来执行一个有bash shebang的脚本?
  • @JNevill 你是我的救星。我为这个错误感到有点羞耻 -.-' ,顺便说一句......谢谢!如果您发布答案,我会将其标记为正确。

标签: bash shell cron


【解决方案1】:

请检查脚本是否有其他用户的执行权限。 当您手动运行时,您正在与您登录的用户一起运行。 但是当它从 Cron 运行时,它是另一个用户。因此,该用户必须具有执行该脚本的权限。

You may check this post for more help

【讨论】:

    猜你喜欢
    • 2011-08-10
    • 2018-06-27
    • 2023-03-06
    • 2016-02-18
    • 2012-02-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-01
    相关资源
    最近更新 更多