从 cron 运行的 Bash 脚本

标签 bash ubuntu cron

我有以下 bash 脚本:

#!/bin/bash
src="/home/user/testingscript"
for dir in $(ls "$src")
do
find ${src}/${dir}/ -type f -mtime +31 delete
done

如果我从终端执行它,它运行良好,但是一旦我像这样将它放在 crontab 中:
* * * * * /bin/bash /home/user/script/mailboxclean.sh >> /home/user/mailboxcleanup.log 2>&1

或作为:
* * * * * /home/user/script/mailboxclean.sh

它不运行。

我在 syslog 中看不到任何反馈,除了脚本已被执行,并且在我重定向的 mailboxcleanup.log 中,我看到以下内容并没有真正帮助:
/home/user/mailboxcleanup.log: 1: /home/user/mailboxcleanup.log: /bin/sh:: not found

有任何想法吗?

谢谢

最佳答案

这取决于你把脚本放在哪里。

如果您希望它通过/etc/crontab 运行:您需要在命令之前的第 6 个参数,指定用户!

 * * * * * theuser /home/user/script/mailboxclean.sh

如果您使用 crontab -e 将它放在某人(root 或用户)的 crontab 中
 * * * * * /home/user/script/mailboxclean.sh

(即,没有第 6 个参数,因为用户是已知的)

请注意,如果您希望通过将其放在/etc/cron.*/下使其每天/每周/每月运行,则需要删除扩展名(即,将其称为 mailboxclean),否则它将被忽略

造成差异的最常见原因是脚本在通过 cron 运行(或放置在/etc/cron.* 目录下)时缺少一些环境变量...检查这一点(您可以在开头添加:echo "=== set: ============ " ; set ; echo "=== env: ============ " ; env例如,在调试时删除你的脚本。或者只是确保你设置了所有你需要的东西)

与问题无关,但您应该更改
for dir in $(ls "$src"); do find ${src}/${dir}/ -type f ....


for dir in "${src}"/*/ ; do find "${dir}" -type f ....

(参见 http://mywiki.wooledge.org/BashPitfalls 了解有关这方面的信息,以及许多其他信息(当您学习 bash 脚本时,他们网站的其余部分也很棒))

关于从 cron 运行的 Bash 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19959848/

相关文章:

regex - Sed 错误 : bad flag in substitute command: 'U'

bash - 将包含空格的数组元素传递给 Zenity 窗口

bash - 在 bash 脚本中使用 GNU 超时和 SSH -t 来防止挂起

linux - Ubuntu:使用 curl 下载图像

ubuntu - Vagrant ssh 使用 ubuntu 默认用户

linux - 使用 java_home 环境变量识别问题来源

php - 如何设置sendmail中的From字段?

linux - 您使用cron做什么?

java - 如何检查@Schedule注释(Spring 3.1)cron作业是否正在运行。

java - Cron 表达式 : Run on specific time (1:30 pm , 15:24 pm) 仅适用于周一和周三