linux atd的坑

linux atd的坑,第1张

        一般linux系统中定时周期性任务的执行我们都是用crontab去实现,而执行延时任务的话比较少人会用到atd服务。之前项目中有需要用到执行延时任务的场景,因为偷懒,懒得自己写工具去实现,就使用了atd服务的at命令创建一个延时任务,结果延时任务竟然没执行。刚好团队内部要分享,觉得这个问题还是有一定价值,先记录下吧。

(注:atd服务centos7中minimal版是没有自带的,需要yum进行安装,安装完毕可以执行at命令进行任务下发,两种方式:1、echo "command" | at now + 时间间隔的形式;2、at命令交互shell的方式)

出现问题的时候查看/var/log/messages等系统日志并没看出什么有效信息,网络上也几乎没找到相关的信息。最终,在尝试复现时,发现了问题所在,linux系统提示“You have mail in /var/spool/mail/root”,tail -f一查看就基本明确了,下面是通过在/root/attest目录下创建echo "echo 10 >/root/task.txt | at now + 2 minute"任务后,删除attest目录后复现出的现象,日志中提示如下:

        邮件提示是运行时的路径找不到了,原来是通过at下发的任务在运行时还依赖执行下发动作时的工作目录,如果你在下发完任务后,把当时的路径给删掉了,那这个任务就GG了。其实可以在下发完任务后通过atq获取到任务编号,并通过at -c 加任务编号查看任务信息,任务信息中有记录运行任务所需的工作路径。

请忽略上图中任务id不一致的情况,上图仅仅是为了说明问题。

1. 查看Linux启动的服务

chkconfig --list 查询出所有当前运行的服务

chkconfig --list atd  查询atd服务的当前状态

2.停止所有服务并且在下次系统启动时不再启动,如下所示:

chkconfig --levels 12345 NetworkManager off

如果想查看当前处于运行状态的服务,用如下语句过滤即可

chkconfig --list |grep on

3.如果只是想当前的设置状态有效,在系统重启动后即不生效的话,可以用如下命令停止服务

service sshd stop

扩展资料:

Linux是一套免费使用和自由传播的类Unix *** 作系统,是一个基于POSIX和UNIX的多用户、多任务、支持多线程和多CPU的 *** 作系统。它能运行主要的UNIX工具软件、应用程序和网络协议。它支持32位和64位硬件。Linux继承了Unix以网络为核心的设计思想,是一个性能稳定的多用户网络 *** 作系统。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/7312673.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-04
下一篇 2023-04-04

发表评论

登录后才能评论

评论列表(0条)

保存