Ubuntu 9.10
crontab -l
0 1 * * * /root/cron/rsync-93.193.99.111 &> /root/cron/rsync-93.193.99.111.log
0 3 * * * tail -100 /root/cron/rsync-93.193.99.111.log | msmtp[电子邮件保护]
ls -l /root/cron/rsync-93.193.99.111.log
-rw-r--r-- root root /root/cron/rsync-93.193.99.111.log
rsync-93.193.99.111.log 文件在 Nautilus 中显示大小为零。
我收到了一封电子邮件,但里面是空的。
运行 tail -100,也显示空输出,因此电子邮件是正确的。
为什么 bash rsync 脚本没有向文件写入任何内容?
答案1
我认为这是因为所使用的 shell&>
不支持。请使用显式形式:sh
cron
0 1 * * * /root/cron/rsync-93.193.99.111 > /root/cron/rsync-93.193.99.111.log 2>&1
另外,你可以用 do 来sudo crontab -e
代替 doing sudo su
then crontab -e
。
答案2
我同意丹尼斯对你的问题的评估。但我还有其他几点要提一下。
最重要的是,不要这样做:
0 1 * * * some command
0 3 * * * some other command that should run after the first one
如果第一个命令需要多于或少于两个小时怎么办?要确保第二个命令在第一个命令完成时运行,请将它们放在一行上:
0 1 * * * /root/cron/rsync-93.193.99.111 >/root/cron/rsync-93.193.99.111.log 2>&1; tail -100 /root/cron/rsync-93.193.99.111.log | msmtp [email protected]
另外,您可能希望利用 cron 的自动发送错误邮件功能。(这假设您的系统已正确设置邮件,但如果您必须运行msmtp
而不是,则可能并非如此mail
。)
[email protected]
0 1 * * * /root/cron/rsync-93.193.99.111 2>&1 | tee /root/cron/rsync-93.193.99.111.log | tail -n 100