从 cron 运行时 shell 脚本失败

从 cron 运行时 shell 脚本失败

任何人都可以帮助我吗?我几个小时以来一直在努力解决一个问题,但似乎无法解决它。

当我通过 shell 执行这个脚本时,它可以工作,并且我还收到发送给我的正确电子邮件输出,但是当它通过 cronjob 执行时,它总是说备份失败,这是不正确的,它可以手动执行它。

#dokuwiki related
dokudate1=$(date +"%d.%m.%y - %H.%M")
host=$(hostname)
dokudate=$(date +"%m-%d")
dokufunc=$(find|grep "dokuwiki"|grep "$dokudate" > doku.txt)

#tw related
twdate1=$(date +"%d.%m.%y - %H.%M")
host=$(hostname)
twdate=$(date +"%d.%m")
twfunc=$(find|grep "torzon"|grep "$twdate" > tw.txt)

fc1(){
$dokufunc
if
grep -R "dokuwiki" doku.txt > /dev/null
then
echo "..."
echo "dokuwiki backup successfull"
echo -en "dokuwiki backup success!" | mail -s "dokuwiki backup check successfull!" mymail.com
rm doku.txt
else
echo "dokuwiki backup fail"
echo -e "dokuwiki backup fail!" | mail -s "dokuwiki backup check failure!" mymail.com
fi
}


fc2(){
$twfunc
if
grep -R "torzon" tw.txt > /dev/null
then
echo "..."
echo "torzon backup successfull"
echo -en "torzon backup success!" | mail -s "torzon backup check successfull!" mymail.com
rm tw.txt
else
echo "torzon backup fail"
echo -e "torzon backup fail!" | mail -s "torzon backup check failure!" mymail.com
fi
}

fc1

fc2

echo "done"

谢谢!

答案1

我不确定您使用的是哪个发行版,但 cron 脚本通常会使用最小的 shell 运行,其“花哨”程度低于交互式 shell。这是你的整个剧本吗?如果是这样,您应该添加一个舍邦加载一些适当的上下文。

此外,它还有助于将完全限定路径用于内置 shell 命令以外的其他操作。例如,find可能位于/usr/bin/find。您可以使用以下which命令来解决这些问题:

[me@host ~]$ which find
/usr/bin/find

最终,正如 DopeGhoti 建议的那样,您应该在某处记录 cron 脚本的输出(捕获 stdout 和 stderr)。例如,

  0 23 * * * /home/user/backup_script.sh >> /var/log/backup.log 2>&1

相关内容