我正在尝试在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
相同的脚本从终端运行并提供所需的结果。
答案 0 :(得分:2)
将set -x; exec 2>/path/to/logfile
放在脚本的顶部,以便在文件运行时将所有后续命令记录到文件中。如果这不起作用,您将知道您的脚本根本没有运行;如果确实如此,你就会知道它失败的地方和方式。
如果您以用户身份运行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
不要尝试将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 -e
或sudo env EDITOR=nano crontab -e
从root的cron调用脚本。
答案 2 :(得分:0)
尝试将此行添加到用户root的crontab而不使用sudo。 像这样:
*/2 * * * * bash /data/html/mysite/site_cleanup.sh