任何人都可以帮助我吗?我几个小时以来一直在努力解决一个问题,但似乎无法解决它。
当我通过 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