I am looking at the Linux at command again.
I used to think that you couldn't create commands with arguments and feed them to at
without using at -f filewithcommandsinit
but I have discovered it's quite easy using STDIN e.g.
# to add a new command to run 1 minute from now use echo and then the command
# by escaping the redirection you can include that also
jm@bb:~$ echo echo this is a test \> /tmp/test | at -q z now + 1 minute
# here is an example of something that might do real work
# echo sudo /etc/rc.d/init.d/pptpd start | at -q p now + 4 hours
# you would have to add the user to your sudoers file with:
# username ALL=NOPASSWD:/etc/rc.d/init.d/pptpd
# otherwise `at' would fail and try to launch a password prompt
warning: commands will be executed using /bin/sh
job 4 at Tue Feb 22 19:31:00 2011
# to list your at jobs use atq
jm@bb:~$ atq
4 Tue Feb 22 19:31:00 2011 z jm
# to view the contents of you job use at -c
jm@bb:~$ at -c 4
#!/bin/sh
# atrun uid=1000 gid=1000
# mail jm 0
umask 22
# a heck of a lot of environment trimmed but finally you get the command you passed in to at
...
echo this is a test > /tmp/test
Deleting all prior at
commands from a certain queue
This one-liner lists the jobs cuts the job numbers out and feeds them to xargs which in turn give them to atrm to remove the jobs.
atq -q p | cut -f1 | xargs -IJOB atrm JOB
# e.g.
# given a list of at jobs as shown
jm@bb:~$ atq
17 Tue Feb 22 19:41:00 2011 z jm
13 Tue Feb 22 19:41:00 2011 z jm
14 Tue Feb 22 19:41:00 2011 z jm
15 Tue Feb 22 19:41:00 2011 z jm
18 Tue Feb 22 19:41:00 2011 z jm
16 Tue Feb 22 19:41:00 2011 z jm
# run the one-liner on them
jm@bb:~$ atq -q p | cut -f1 | xargs -IJOB atrm JOB
jm@bb:~$ atq # they should be gone but their not because I specified the wrong queue with -q p
# instead of -q z
17 Tue Feb 22 19:41:00 2011 z jm
13 Tue Feb 22 19:41:00 2011 z jm
14 Tue Feb 22 19:41:00 2011 z jm
15 Tue Feb 22 19:41:00 2011 z jm
18 Tue Feb 22 19:41:00 2011 z jm
16 Tue Feb 22 19:41:00 2011 z jm
# get it right
jm@bb:~$ atq -q z | cut -f1 | xargs -IJOB atrm JOB
jm@bb:~$ atq
# and they are all deleted
0 Comments