cron
来完成此任务,并且在cron中,我还尝试将备份脚本的输出重定向到logfile
。crontab -e
*/1 * * * * /home/ranveer/backup.sh &>> /home/ranveer/backup.log
在上面的cron条目中,我将两个
stderr and stdout
都重定向到日志文件。 syslog
并执行backup.sh
文件中提到的任务,但不向日志文件写入任何内容。/var/log/syslog
Oct 19 20:26:01 ranveer CRON[15214]: (ranveer) CMD (/home/ranveer/backup.sh &>> /home/ranveer/backup.log)
何时我从cli运行脚本,该脚本按要求运行,并且输出被写入日志文件。
在cron中。
#1 楼
我解决了问题。有两种方法:M1
将重定向从
&>>
更改为2>&1
。所以现在crontab -e
看起来像*/1 * * * * /home/ranveer/vimbackup.sh >> /home/ranveer/vimbackup.log 2>&1
我相信上面的方法是有效的,因为默认情况下
cron
使用sh
而不是bash
来运行任务,所以&>>
不支持sh
。 br /> M2
通过在
SHELL=/bin/bash
文件中添加crontab -e
来更改默认外壳。评论
cron就像sh:它不会选择一个程序。有很多实现。最流行的实现是Vixie cron。我是另一本书的作者(当前,不是原始作者)。我相信大多数cron守护程序都将使用系统的sh,但是在是否接受&>>方面可能有所不同。一些cron守护程序(例如我的cron守护程序)使您无法更改crontab中使用SHELL = ...很高兴您找到了适合您的解决方案;只是认为值得指出的是,有很多变量可能会影响它是否对其他人有用。
– dubiousjim
2012年10月19日15:50
如何在输出文件名中插入YYYY-MM-DD_hh-mm-sec,以使每个文件名都不同并且无需重写就可以保留?
–丹尼尔(Danijel)
16年1月11日在13:18
@Danijel:这应该有助于serverfault.com/questions/117360/…
–RanRag
16年1月15日在9:09
* / 1 * * * * /home/ranveer/vimbackup.sh&>> /home/ranveer/vimbackup.log也做同样的事情。
– Yanick Girouard
17年8月15日14:56
#2 楼
免责声明[1]。我想在@RanRag的答案中添加脚注或附录。
确保您的Shell重定向语法符合
/bin/sh
。如果您尝试使用对/bin/sh
无效的shell重定向语法,则命令将失败,并且cron作业将永远不会运行。该用户的登录外壳不是/etc/cron.d/example1
...,您仍必须在root
命令中使用/ bin / sh语法。例如
如果用户具有外壳为他的登录shell设置了
/bin/bash
或/etc/cron.d/example1
或csh
。在您的zsh
配置文件中,该命令必须使用ksh
语法。具体来说,任何外壳程序重定向都必须使用/etc/cron.d/example1
语法。位于/bin/sh
的/bin/sh
日志文件应说明该命令已运行,但该命令将在运行命令之前因语法错误而出错。 br /> 在
csh
中从未报告过该错误。 /etc/cron.d/example1
会默认使用crond
发出任何错误消息。因此,您必须检查/var/log/cron
才能查看错误是什么。 crond
信息可能有所不同具体来说,此信息是针对
/var/log/cron
发行版而获得的,可能不适用于其他crond
发行版我特别提到
mail
不同的发行版可能具有与/var/spool/mail/${USER}
不同的sysv
实现方式评论
如果您希望/etc/cron.d/example1命令使用其他Shell,则可以在/etc/cron.d/example1配置文件中使用set SHELL =。
–特雷弗·博伊德·史密斯(Trevor Boyd Smith)
17年5月29日在20:08
评论
superuser.com/questions/122246/…