有一种系统管理里常见的操作,是针对CentOS系统的定时任务管理器crontab去进行重启,这一般表明出我们碰到了crontab服务没能依照预期去执行任务的状况,得借助重启来再度加载配置或者排查故障,掌握正确且安全的重启办法,并且理解其背后所含的原因,这对维护系统稳定来讲是非常关键的。

CentOS中crontab服务如何重启

具有CentOS 7及更新版本的情形下,crontab服务是由crond守护进程予以提供的,并且被整合进入了systemd管理体系之中。所以,最为标准的重启命令sudo systemctl restart crond。此条指令会向crond进程递送信号,令其顺利地终止随后再重新启动,同时加载最新的crontab配置文件。

重启人生_crontab重启_centos crontab重启

执行完毕之后,提议运用sudo systemctl status crond去验证服务所处状态,要保证其呈现为“active (running)”。与此同时,借助crontab -l再度认定你的个人定时任务列表不存在差错。需要留意的是,重启服务不会对已编辑然而尚未保存的crontab文件产生影响,它仅仅作用于已经经由crontab -e保存且生效的配置。

为什么需要重启crontab服务

由于手动修改了系统级的/etc/crontab文件,或者手动修改了/etc/cron.d/目录下的配置文件,这就促成了重启crontab服务成为最为常见的缘由。不同于用户借助crontab -e编辑的任务,这些系统级配置文件的变更,必须重启crond服务,方可被识别以及加载。这可是许多管理员在配置之后察觉到任务未执行之时,理应首先做排查的操作步骤哟。

还有一个典型的场景,那就是crontab任务出现了毫无缘由的执行失败情况,然而任务脚本自身在进行手动测试的时候却是正常的。此情形或许是由于crond进程自身出现了结死、资源用光或者其他不明的错误。重新启动服务能够迅速消除进程的异常状态,这是一种切实可行的故障排查办法,特别是当你当前暂时没有办法确定更深层次的原因的时候 。

重启crontab会影响正在执行的任务吗

这是个得谨慎去对待的问题 , 没错 , 重启crond服务会让所有它所管理的正在运行的任务被中断 。 当你执行那个systemctl restart crond 之举的时候 , 系统会先给crond进程发送TERM信号 , 以此使其优雅地退出 。 crond会试着去通知它那里派生出来的子进程 , 也就是那些正在运行的任务啦 , 但被子进程是否以及怎样去响应 ,是取决于任务脚本自身的实现情况的 。

centos crontab重启_crontab重启_重启人生

对于那些设计优良的脚本而言,它们会在捕获终止信号之后,完成必需的清理工作,然后才退出。但对于某些长时间运行且没有处理信号机制的脚本来说,它们有可能会被强制终止centos crontab重启,也就是被Kill,这会致使数据不一致或者任务未完成。所以,在重启之前,最好借助pgrep -f或者ps aux | grep等方式,去查看是否有重要的crontab任务正在运行。

如何检查crontab重启是否成功

重新启动之后,首先要做的事情是检查服务的状态,运行systemctl status crond命令来查看,着重留意输出结果里“Active”那一行是不是显示为“active (running)”,而且还不存在报错的信息,与此同时,查看系统日志算得上是更为深入的一种手段。运用sudo journalctl -u crond -n 50 --no-pager这般操作能够去查看crond服务最为新近的50条日志,在此处会记载服务启动、再度加载配置以及执行具体任务等详尽资讯。

你能够于日志里搜寻“reloading”或者“SIGHUP”这类关键词,以此来确认配置已然被重载。更为直接的验证方式是,去安排一项测试任务,像是一分钟过后执行一条简易的echo命令或者生成一个测试文件,进而观察其是否按时且准确地执行。这便是确认crontab服务全然恢复到正常工作状态的最终标准。

重启人生_centos crontab重启_crontab重启

crontab重启失败怎么办

要是执行了systemctl restart crond命令之后,服务没办法启动起来,那么首先得去查看详尽的错误日志,命令sudo journalctl -xe能够给出最近的系统级方面的错误信息,常见的原因涵盖了crontab配置文件存在着语法错误,像是在/etc/crontab里格式不正确,又或者是在/etc/cron.d/目录下的文件命名、权限不符合规范。

可存在的另外一种可能性乃是,环境变量或者路径方面的问题致使crond进程自身没办法启动成功。能够试着用调试模式来启动:sudo /usr/sbin/crond -n,如此一来会使crond在前台运行,并且将日志输出到终端,从而方便直接去观察启动过程当中遇见的错误。除此之外,对磁盘空间(df -h)以及内存是否充足进行检查linux windows红旗linux操作系统,同样是排除系统层面问题的基础性步骤。

除了重启还有什么替代方法

重启人生_crontab重启_centos crontab重启

用户借助crontab -e去编辑的任务,根本就完全不需要重启一回服务。因为在每个用户的crontab文件保存在处于/var/spool/cron/这个目录之下的时候,crond服务会凭借inotify机制自动去检测出发生的变化并且马上就会生效。这可算是一种更加优雅的、没有中断情况的更新方法。

倘若针对系统级配置,要是不期望重启服务致使可能正处于运行状态的任务产生中断状况,那么能够尝试去发送HUP信号以实现重载配置,执行命令为:sudo systemctl reload crond 或者 sudo kill -HUP $(pidof crond) 。如此一来会让crond再度读取全部配置文件,并且不需要终止以及重启主进程。不过需要留意的是,某些极为老旧的crond版本或许并不完全支持reload这个操作,在这种情形下重启依旧是较为可靠的选择。

你于管理着CentOS服务器之际centos crontab重启,碰到了crontab任务未执行的状况,除重启服务之外,最先会去检查哪三个关键点用以快速定位问题呢?欢迎于评论区分享你的排查经验,要是觉得本文存有帮助之处,请点赞并分享给更多的运维伙伴。

Tagged:
Author

这篇优质的内容由TA贡献而来

刘遄

《Linux就该这么学》书籍作者,RHCA认证架构师,教育学(计算机专业硕士)。

发表回复