我有以下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
有什么想法吗?
由于
答案 0 :(得分:1)
这取决于您放置脚本的位置。
如果您希望通过/ etc / crontab运行它:在命令之前需要第6个参数,指定用户!
* * * * * theuser /home/user/script/mailboxclean.sh
如果您使用crontab -e
* * * * * /home/user/script/mailboxclean.sh
(即,没有第6个参数,因为用户已知)
请注意,如果您希望通过将其放在/etc/cron.*/下每天/每周/每月运行,则需要删除扩展名(即,将其称为mailboxclean
),否则它将被忽略
最常见的原因是脚本在通过cron运行时(或放在/etc/cron.*目录下面时)缺少一些环境变量...检查这个(你可以添加:{{1例如,在调试时脚本的开头。或者只是确保设置正确需要的所有内容
与问题无关,但你应该改变
echo "=== set: ============ " ; set ; echo "=== env: ============ " ; env
到
for dir in $(ls "$src"); do find ${src}/${dir}/ -type f ....
(有关此信息的信息,请参阅http://mywiki.wooledge.org/BashPitfalls,以及其他许多信息(当您学习bash脚本时,其他网站也非常棒))