让 cron 运行脚本

让 cron 运行脚本

我正在尝试让脚本根据 crontab 条目运行。我的脚本在终端中运行良好,但不会根据 cron 条目自动运行。该脚本只是每小时在 /testexport1 目录中创建一个空文件一次。

我使用 crontab -e 编辑 crontab,如下所示:

30 * * * * /bin/bash/ /testexport1/./createfilescript.sh

脚本本身如下所示:

[root@centostest testexport1]# cat createfilescript.sh
#!/bin/bash

PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/testexport1

today="$( date +"%Y%m%d" )"
number=0

while test -e "$today$suffix.txt"; do
    (( ++number ))
    suffix="$( printf -- '-%02d' "$number" )"
done

fname="$today$suffix.txt"

printf 'Will use "%s" as filename\n' "$fname"
touch "$fname"

我将 PATH 部分添加到脚本的顶部,以指定脚本的运行位置(根据我读过的另一篇文章)。

知道为什么这个 crontab 条目似乎没有运行脚本吗?我确信这是一个简单的修复,但我现在正在兜圈子。

答案1

crontab 没有运行该脚本,因为/bin/bash/很可能找不到。这应该改为(注意末尾/bin/bash缺少),或者系统上的任何正确路径。/bash

还要确保您在脚本中使用的所有实用程序实际上都可以在$PATH您设置的中找到。更常见的是调整路径而不是覆盖它,因为系统路径通常包括touch可以找到类似内容的目录。

答案2

date二进制touch文件在/bin,这不属于您的$PATH.

答案3

我本来只是想添加评论,但因为我还不能......

因为您是从 cron 执行的,所以 cron 不知道您想要在哪个文件夹中创建文件,因此只需更改到脚本开头的该目录即可解决该问题:

[root@centostest testexport1]# cat createfilescript.sh
#!/bin/bash

PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/testexport1

cd  /testexport1

today="$( date +"%Y%m%d" )"
number=0

while test -e "$today$suffix.txt"; do
    (( ++number ))
    suffix="$( printf -- '-%02d' "$number" )"
done

fname="$today$suffix.txt"

printf 'Will use "%s" as filename\n' "$fname"
touch "$fname"

另一件事是 cron 行:

30      *       *       *       *       /bin/bash/ /testexport1/./createfilescript.sh

如果脚本位于 /testexport1/ ,请使用此更改 cron 行

30      *       *       *       *       /bin/bash /testexport1/createfilescript.sh

相关内容