EDIT: seems this is a bug in the at-3.2.4 changes see the upstream bug
https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1004972
and will probably be fixed in at-3.2.5
Anyone else having trouble with the at package?
If I update to at-3.2.4-1.1, restart at and test an at command I find the command doesn't execute at the specified time. Instead it executes when another at command is entered.
If I revert to at-3.2.2-1.1 and restart then commands execute at the expected time.
I see the same behaviour in archlinux x86_64, armtix aarch64 & manjaro aarch64.
I used strace to look at what the two versions do at the expected time; it looks like at-3.2.4-1.1 gets a wakeup at the expected time, but doesn't seem to execute the child process as is done in at-3.2.2-1.1, but I am not an expert.
at-3.2.2 expected time is 11:21:00
11:20:02 --- SIGHUP {si_signo=SIGHUP, si_code=SI_USER, si_pid=1495, si_uid=1000} ---
11:20:02 rt_sigreturn({mask=[]}) = -1 EINTR (Interrupted system call)
11:20:02 newfstatat(AT_FDCWD, ".", {st_mode=S_IFDIR|S_ISVTX|0770, st_size=4096, ...}, 0) = 0
11:20:02 openat(AT_FDCWD, ".", O_RDONLY|O_NONBLOCK|O_CLOEXEC|O_DIRECTORY) = 4
11:20:02 newfstatat(4, "", {st_mode=S_IFDIR|S_ISVTX|0770, st_size=4096, ...}, AT_EMPTY_PATH) = 0
11:20:02 getdents64(4, 0x5591ae1b8860 /* 4 entries */, 32768) = 112
11:20:02 newfstatat(AT_FDCWD, "a0001301a28069", {st_mode=S_IFREG|0700, st_size=3751, ...}, 0) = 0
11:20:02 getdents64(4, 0x5591ae1b8860 /* 0 entries */, 32768) = 0
11:20:02 close(4) = 0
11:20:02 clock_nanosleep(CLOCK_REALTIME, 0, {tv_sec=58, tv_nsec=0}, 0x7ffeb0a9e990) = 0
11:21:00 newfstatat(AT_FDCWD, ".", {st_mode=S_IFDIR|S_ISVTX|0770, st_size=4096, ...}, 0) = 0
11:21:00 openat(AT_FDCWD, ".", O_RDONLY|O_NONBLOCK|O_CLOEXEC|O_DIRECTORY) = 4
11:21:00 newfstatat(4, "", {st_mode=S_IFDIR|S_ISVTX|0770, st_size=4096, ...}, AT_EMPTY_PATH) = 0
11:21:00 getdents64(4, 0x5591ae1b8860 /* 4 entries */, 32768) = 112
11:21:00 newfstatat(AT_FDCWD, "a0001301a28069", {st_mode=S_IFREG|0700, st_size=3751, ...}, 0) = 0
11:21:00 setreuid(2, 0) = 0
11:21:00 setregid(2, 0) = 0
11:21:00 link("a0001301a28069", "=0001301a28069") = 0
11:21:00 setregid(0, 2) = 0
11:21:00 setreuid(0, 2) = 0
11:21:00 clone(child_stack=NULL, flags=CLONE_CHILD_CLEARTID|CLONE_CHILD_SETTID|SIGCHLD, child_tidptr=0x7ff4b1fbd590) = 1501
11:21:00 getdents64(4, 0x5591ae1b8860 /* 0 entries */, 32768) = 0
11:21:00 close(4) = 0
11:21:00 clock_nanosleep(CLOCK_REALTIME, 0, {tv_sec=3600, tv_nsec=0}, {tv_sec=3599, tv_nsec=984348862}) = ? ERESTART_RESTARTBLOCK (Interrupted by signal)
11:21:00 --- SIGCHLD {si_signo=SIGCHLD, si_code=CLD_EXITED, si_pid=1501, si_uid=0, si_status=0, si_utime=0, si_stime=0} ---
11:21:00 wait4(-1, [{WIFEXITED(s) && WEXITSTATUS(s) == 0}], WNOHANG, NULL) = 1501
11:21:00 wait4(-1, 0x7ffeb0a9e3a4, WNOHANG, NULL) = -1 ECHILD (No child processes)
11:21:00 rt_sigreturn({mask=[]}) = -1 EINTR (Interrupted system call)
11:21:00 newfstatat(AT_FDCWD, ".", {st_mode=S_IFDIR|S_ISVTX|0770, st_size=4096, ...}, 0) = 0
11:21:00 openat(AT_FDCWD, ".", O_RDONLY|O_NONBLOCK|O_CLOEXEC|O_DIRECTORY) = 4
11:21:00 newfstatat(4, "", {st_mode=S_IFDIR|S_ISVTX|0770, st_size=4096, ...}, AT_EMPTY_PATH) = 0
11:21:00 getdents64(4, 0x5591ae1b8860 /* 3 entries */, 32768) = 72
11:21:00 getdents64(4, 0x5591ae1b8860 /* 0 entries */, 32768) = 0
11:21:00 close(4) = 0
at-3.2.4 expected time 11:16:00
11:15:21 pause() = ? ERESTARTNOHAND (To be restarted if no handler)
11:15:30 --- SIGHUP {si_signo=SIGHUP, si_code=SI_USER, si_pid=1387, si_uid=1000} ---
11:15:30 rt_sigreturn({mask=[]}) = -1 EINTR (Interrupted system call)
11:15:30 newfstatat(AT_FDCWD, ".", {st_mode=S_IFDIR|S_ISVTX|0770, st_size=4096, ...}, 0) = 0
11:15:30 openat(AT_FDCWD, ".", O_RDONLY|O_NONBLOCK|O_CLOEXEC|O_DIRECTORY) = 4
11:15:30 newfstatat(4, "", {st_mode=S_IFDIR|S_ISVTX|0770, st_size=4096, ...}, AT_EMPTY_PATH) = 0
11:15:30 getdents64(4, 0x55e77a45d860 /* 4 entries */, 32768) = 112
11:15:30 newfstatat(AT_FDCWD, "a0001201a28064", {st_mode=S_IFREG|0700, st_size=3751, ...}, 0) = 0
11:15:30 getdents64(4, 0x55e77a45d860 /* 0 entries */, 32768) = 0
11:15:30 close(4) = 0
11:15:30 timer_settime(0, TIMER_ABSTIME, {it_interval={tv_sec=0, tv_nsec=0}, it_value={tv_sec=1645614960, tv_nsec=0}}, NULL) = 0
11:15:30 pause() = ? ERESTARTNOHAND (To be restarted if no handler)
11:16:00 --- SIGHUP {si_signo=SIGHUP, si_code=SI_TIMER, si_timerid=0, si_overrun=0, si_int=2035884192, si_ptr=0x55e7795920a0} ---
11:16:00 rt_sigreturn({mask=[]}) = -1 EINTR (Interrupted system call)
11:16:00 newfstatat(AT_FDCWD, ".", {st_mode=S_IFDIR|S_ISVTX|0770, st_size=4096, ...}, 0) = 0
11:16:00 openat(AT_FDCWD, ".", O_RDONLY|O_NONBLOCK|O_CLOEXEC|O_DIRECTORY) = 4
11:16:00 newfstatat(4, "", {st_mode=S_IFDIR|S_ISVTX|0770, st_size=4096, ...}, AT_EMPTY_PATH) = 0
11:16:00 getdents64(4, 0x55e77a45d860 /* 4 entries */, 32768) = 112
11:16:00 newfstatat(AT_FDCWD, "a0001201a28064", {st_mode=S_IFREG|0700, st_size=3751, ...}, 0) = 0
11:16:00 getdents64(4, 0x55e77a45d860 /* 0 entries */, 32768) = 0
11:16:00 close(4) = 0
11:16:00 timer_settime(0, TIMER_ABSTIME, {it_interval={tv_sec=0, tv_nsec=0}, it_value={tv_sec=1645614960, tv_nsec=0}}, NULL) = 0
11:16:00 --- SIGHUP {si_signo=SIGHUP, si_code=SI_TIMER, si_timerid=0, si_overrun=0, si_int=2035884192, si_ptr=0x55e7795920a0} ---
11:16:00 rt_sigreturn({mask=[]}) = 0
11:16:00 pause()