Job spooling tools
1. It looks like the at command does not validate that it has succeeded to write all data before it makes the file executable (i.e on a disk full an empty file might get created).
2. After 60 minutes (run_time + CHECK_INTERVAL <= now), atd (approx line 750) starts to unlink the lockfile and retries the execution of the job, leaving us with this unfortunate loop.
Reproducer:
ATD_PID=$(ps -C atd -o pid=)
QUEUE=a
JOBNO=$(printf '%05x' 123)
BAD_TIME=$(expr $(date +%s) / 60 - 61)
CTM=$(printf '%08x' $BAD_TIME )
FILENAME=/var/spool/at/${QUEUE}${JOBNO}${CTM}
touch $FILENAME
chmod 0700 $FILENAME
kill -HUP ${ATD_PID}
sleep 0.5
ls -l $FILENAME
rm -f $FILENAME
Thanks to: Anders Blomdell
|
||
|---|---|---|
| .gitignore | ||
| 56atd | ||
| at-3.1.11-pam.patch | ||
| at-3.1.12-fix_no_export.patch | ||
| at-3.1.12-fix.patch | ||
| at-3.1.12-makefile.patch | ||
| at-3.1.12-nitpicks.patch | ||
| at-3.1.12-nowrap.patch | ||
| at-3.1.12-opt_V.patch | ||
| at-3.1.12-pam.patch | ||
| at-3.1.12-selinux.patch | ||
| at-3.1.12-shell.patch | ||
| at-3.1.13-help.patch | ||
| at-3.1.13-mailwithhostname.patch | ||
| at-3.1.13-makefile.patch | ||
| at-3.1.13-nitpicks.patch | ||
| at-3.1.13-pam.patch | ||
| at-3.1.13-selinux.patch | ||
| at-3.1.13-usePOSIXtimers.patch | ||
| at-3.1.14-help.patch | ||
| at-3.1.14-mailwithhostname.patch | ||
| at-3.1.14-makefile.patch | ||
| at-3.1.14-opt_V.patch | ||
| at-3.1.14-pam.patch | ||
| at-3.1.14-selinux.patch | ||
| at-3.1.14-shell.patch | ||
| at-3.1.14-usePOSIXtimers.patch | ||
| at-3.1.14-wrong_format.patch | ||
| at.spec | ||
| atd.init | ||
| atd.sysconf | ||
| atd.systemd | ||
| sources | ||