起因是一件诡异的事情,Linux服务器上的cron意外消失了,查看了操作日志,并没有对cron进行编辑的命令出现。
大多是sudo crontab -l,或者不小心敲错了的sudo crond,sudo crontab...
等等,好像有不对的地方,不小心敲下 crontab 之后,会好长时间没有反应,我懒得等待,就强制退出了。
然后渡过了一个漫长的假期,回到公司,登录Linux,敲下 crontab -l,然后,发现所有的任务竟然没有了。。。
一开始我以为是命令敲错了,就连着敲了多次,这才确认是真的被意外清空了。
ok,问题到这里结束。原因解析:
如果我们在SSH远程终端中敲下“crontab”命令之后,远程连接被一些原因(比如强制退出, 糟糕的网络,程序异常)意外终止了,那么Crontab计划任务就会被操作系统所清空。
听起来很不可思议,但是经过虚拟机上的多次测试,它确确实实的发生了。
测试方式为 用SecureCRT开一个SSH窗口,然后敲下命令“crontab”,接着在“任务管理器”中直接杀掉SecureCRT进程,再通过另外一个SSH窗口执行“crontab -l”,就会发现,所有的计划任务都不存在了。
补救措施:
短期内可以通过查看crontab日志文件 /var/log/cron 进行恢复。
crontab日志操作记录分析:
进入 /var/spool/cron 目录,输入 history 命令回车查看,可判断是否曾经单独输入了 crontab,且没有加任何后缀参数。
cron执行日志分析:
执行 cat /var/log/cron 命令,如果正常执行的日志后面出现了类似 如下的日志记录,那说明十有八九是crontab导致的了。
Oct 8 14:39:45 s1 crontab[30072]: (root) REPLACE (root)
Oct 8 14:40:01 s1 crond[13605]: (root) RELOAD (/var/spool/cron/root)
Oct 8 14:40:01 s1 CROND[15313]: (root) CMD (/usr/lib64/sa/sa1 -S DISK 1 1)
Oct 8 14:40:01 s1 crond[5342]: (root) RELOAD (/var/spool/cron/root)
Oct 8 14:40:01 s1 CROND[15315]: (root) CMD (/usr/lib64/sa/sa1 -S DISK 1 1)