我有一个bash脚本,我希望每15分钟执行一次,所以我将此行添加到我的crontab中:
7,22,37,52 * * * * /path/to/my/script.sh
我已经检查了目录路径是否正确,如果我只是从任何目录手动运行/path/to/my/script.sh
,脚本就会正常运行。我的剧本中有这个爆炸线:
#!/usr/bin/env bash
我的脚本还引用了与它相同的目录中的其他脚本,并且我已经在所有需要的脚本上运行chmod +x
。我将MAILTO
设置为我的电子邮件地址,当我将crontab中的行更改为:
7,22,37,52 * * * * sh /path/to/my/script.sh
但我在使用
时从未收到过电子邮件 7,22,37,52 * * * * /path/to/my/script.sh
或
7,22,37,52 * * * * bash /path/to/my/script.sh
我确保cron正在运行,并且我也尝试将我的脚本输出重定向到日志文件,这也只有在我包含sh时才会写入。但是,如果我从主目录运行sh /path/to/my/script.sh
,它将不起作用。我的脚本实际运行的唯一方法是(从任何目录)我调用/path/to/my/script.sh
或bash /path/to/my/script.sh
。我非常擅长编写bash脚本,所以非常欢迎任何帮助。
答案 0 :(得分:3)
@pvas应特别小心处理cron用户环境。大多数用户的假设是他们可以访问路径,目录,权限等。这远非如此。 Cron在最小的环境中运行,您必须设置一切 - 路径,权限以及运行脚本的位置。
1)我自己设置环境。
2)我在我的crontabs中使用完全扩展的路径。
3)我确保任何需要阅读的目录都具有读权限。
4)我确保我的密码不会过期,因为这样会阻止cron。
5)确保显式调用底层脚本(Perl,Bash,Python等)。
6)将cron行上的命令传递给LOG文件(更好的是带有TIMESTAMP的日志文件)。
修复这些内容,然后重试。 Cron很特别,你需要设置一切。
例如:
#SETUP ENVIRONMENT
SHELL=/bin/bash
source /home/userfoo/.bash_profile
#RUN THE SCRIPT everyday at 11:50pm (23:50)
50 23 * * * userfoo /home/userfoo/script.sh >> LOGFILE.txt
<<
答案 1 :(得分:1)