我正在尝试让脚本根据 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