sh文件没有在cron ubuntu上运行

时间:2015-12-15 12:44:09

标签: linux bash shell ubuntu cron

我正在尝试在Ubuntu平台上的crontab上运行shell脚本。我尝试过谷歌搜索和其他链接,但到目前为止没有任何帮助。

这是我的crontab

*/2 * * * *  sudo bash /data/html/mysite/site_cleanup.sh

这是我的sh文件的内容:

#!/bin/sh
# How many days retention do we want ?
DAYS=0

# geting present day 
now=$(date +"%m_%d_%Y")

# Where is the base directory
BASEDIR=/data/html/mysite

#where is the backup directory
BKPDIR=/data/html/backup

# Where is the log file
LOGFILE=$BKPDIR/log/mysite.log

# add to tar 
tar -cvzf $now.tar.gz $BASEDIR

mv $now.tar.gz $BKPDIR

# REMOVE OLD FILES
echo `date` Purge Started >> $LOGFILE
find $BASEDIR -mtime +$DAYS | xargs rm
echo `date` Purge Completed >> $LOGFILE

相同的脚本从终端运行并提供所需的结果。

3 个答案:

答案 0 :(得分:2)

非交互式shell脚本的通用故障排除

set -x; exec 2>/path/to/logfile放在脚本的顶部,以便在文件运行时将所有后续命令记录到文件中。如果这不起作用,您将知道您的脚本根本没有运行;如果确实如此,你就会知道它失败的地方和方式。

如果这是个人的crontab

如果您以用户身份运行crontab -e(没有sudo),则正在修改的crontab是用于使用该用户的权限运行的命令。检查文件权限是否允许该用户修改相关内容(如果这些文件位于cgi-bin目录中,则可能需要由与Web服务器相同的用户运行)。

如果 intent 要以root用户身份运行命令,而不是以自己的用户身份运行,请确保在编辑crontab时使用sudo来编辑系统crontab(但请在这种情况下要注意脚本的正确性 - 如果缺少引号或在xargs使用中缺乏适当的预防措施,可能会导致脚本在创建恶意文件名时删除错误的文件):

sudo crontab -e             ## to edit the system (root) crontab

...或者,如果您正在清理apache用户拥有的文件(例如,检查哪个帐户对您自己的操作系统和Web服务器是正确的):

sudo -u apache crontab -e   ## to edit the apache user's crontab

系统crontab

的故障排除

不要尝试将sudo命令放在cron运行的命令中;使用sudo的默认配置,它需要将TTY(键盘和屏幕)附加到会话才能运行。因此,您的crontab行不应包含sudo,而应如下所示:

*/2 * * * *  bash /data/html/mysite/site_cleanup.sh

答案 1 :(得分:1)

您的问题可能来自您的用户级cron的sudo调用。除非你已经完成并编辑了bashrc配置文件以允许该脚本在没有sudo的情况下运行,否则它每次都会挂断。

因此,您可以通过修改bashrc配置文件来查找如何运行没有密码的脚本,如果您没有在脚本中执行调用超级用户权限的操作,则删除sudo调用,或者作为最后的沟渠,非常糟糕如果您更喜欢nano作为编辑,可以通过sudo crontab -esudo env EDITOR=nano crontab -e从root的cron调用脚本。

答案 2 :(得分:0)

尝试将此行添加到用户root的crontab而不使用sudo。 像这样:

*/2 * * * * bash /data/html/mysite/site_cleanup.sh