atd 作业未在预定时间运行

atd 作业未在预定时间运行

atd我在 OracleLinux 7 服务器上安排了一项一次性工作。但是,在系统时钟超过预定时间后,它仍然在队列中。

# atq
2       Mon Mar 14 00:00:00 2022 a root
# date
Mon Mar 14 09:38:15 NZDT 2022

服务atd正在运行:

# systemctl status atd -l
● atd.service - After the Deadline Spell Check Service
   Loaded: loaded (/etc/systemd/system/atd.service; enabled; vendor preset: enabled)
   Active: active (running) since Tue 2022-02-08 11:16:33 NZDT; 1 months 3 days ago
  Process: 1259 ExecStart=/opt/atd/startup.sh (code=exited, status=0/SUCCESS)
 Main PID: 1270 (sh)
   CGroup: /system.slice/atd.service
           ├─1270 /bin/sh ./run.sh
           └─1283 java -server -Datd.lowmem=true -Dsleep.pattern_cache_size=8192 -Dbind.interface=127.0.0.1 -Dserver.port=1049 -Xmx3840M -XX:ParallelGCThreads=8 -XX:+AggressiveHeap -XX:+UseParallelGC -Dsleep.classpath=./lib:./service/code -Dsleep.debug=24 -classpath ./lib/* httpd.Moconti atdconfig.sl

该作业只是使用内置命令更改一些文件,并且在其他服务器上成功执行。

我还尝试检查命令是否被卡住,但我找不到任何正在运行的进程。所以我可以断定,atd工作还没有开始!

在 下/var/spool/cron/root,有一个名为 的文件a0000201a2e594。基于此线程:https://stackoverflow.com/questions/4304631/rescheduling-an-at-job我们可以通过将最后 8 位数字转换为人类可读的时间来获得时间戳。所以https://www.epochconverter.com/告诉我该作业将在我的时区 2022 年 3 月 13 日 20:51:41 执行?与我定义的时间不符,但肯定是超过了时间表。

为什么这个盒子上无法完成这项工作?

答案1

奇怪的是,我发现了atd服务调用/opt/atd/startup.sh脚本,深入研究该脚本后,发现它只是一个java脚本。

我手动运行/usr/sbin/atd,我注意到排队的作业已被处理。

我还发现/var/run/atd.pid必须存在才能证明atd守护进程正在运行。

所以,这个问题是由于有人修改了 systemctl 服务并“假装”该服务atd正在运行而引起的!

相关内容