Linux sh文件未在cron ubuntu上运行

Linux sh文件未在cron ubuntu上运行,linux,bash,shell,ubuntu,cron,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") #

我试图在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

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

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

*/2 * * * * bash /data/html/mysite/site_cleanup.sh
非交互式shell脚本的一般故障排除 放置
set-x;执行脚本顶部的exec 2>/path/to/logfile
,将所有后续命令在运行时记录到文件中。如果这不起作用,您将知道您的脚本根本没有运行;如果成功了,您将知道它在哪里失败以及如何失败

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

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

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

系统crontab的故障排除 不要尝试将
sudo
命令放入
cron
运行的命令中;使用
sudo
的默认配置,它需要TTY(键盘和屏幕)连接到会话以便运行。因此,crontab行不应包含
sudo
,而是应如下所示:

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

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


因此,您可以通过修改bashrc配置文件来查找如何在没有密码的情况下运行脚本,如果您的脚本中没有执行需要超级用户权限的操作,则删除sudo调用,或者作为最后一个选择,您可以通过执行
sudo crontab-e
sudo env EDITOR=nano cron从root的cron调用脚本tab-e
如果您喜欢nano作为您的编辑器。

我想您没有名为“sudo”的用户,如果这是
/etc/crontab
,用
root
替换
sudo
。我的坏消息是我没有保留任何sudo,*/2****bash/data/html/mysite/site\u cleanup.sh。谢谢保罗这是crontab文件吗?我的意思是,它是在
/etc//code>下还是用
crontab-e
编辑的?它是用crontab-e
编辑的危险。以root用户身份运行脚本不会使它更安全。请查看
bash
,如果脚本具有适当的hash-bang,则它是无用的。好吧--
bash
正在覆盖shebang,如果将它留给自己的设备,它将使用
/bin/sh
本身。
源代码
将使用
/bin/sh
(除非crontab的标题中有
SHELL=
行),否则会显著改变行为。我认为,否决票的原因是,这让我印象深刻的更多是一个问题列表,而不是一个规范的答案(其中一些问题不太可能有成效;例如,以root运行的cron作业不太可能缺乏读取权限)。诚然,有时OP没有提供足够的信息来构建规范的答案,但鼓励在不充分的问题上添加信息是评论的目的。我已尝试编辑此内容,以删除不确定相关性的问题,并以更规范的语气发言。请随时回顾(和/或让我知道)如果你觉得我太严厉了。
sudo -u apache crontab -e   ## to edit the apache user's crontab
*/2 * * * *  bash /data/html/mysite/site_cleanup.sh