Bash脚本从cron运行

时间:2013-11-13 17:00:19

标签: 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

有什么想法吗?

由于

1 个答案:

答案 0 :(得分:1)

这取决于您放置脚本的位置。

如果您希望通过/ 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.*目录下面时)缺少一些环境变量...检查这个(你可以添加:{{1例如,在调试时脚本的开头。或者只是确保设置正确需要的所有内容


与问题无关,但你应该改变

echo "=== set: ============ " ; set ; echo "=== env: ============ " ; env

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

(有关此信息的信息,请参阅http://mywiki.wooledge.org/BashPitfalls,以及其他许多信息(当您学习bash脚本时,其他网站也非常棒))