Written by James McDonald

June 9, 2010

Cron does repeating jobs at runs one off jobs. So can be handy

You need the `at’ package

yum install at

The at daemon must be running


ps -ef | grep atd
root      2496     1  0 Mar18 ?        00:00:00 /usr/sbin/atd

If not. Use chkconfig (redhatian) or update-rc.d (debian) to set it to start automatically

# add it (This is how you would get it running with a Redhat based system such as Fedora)
chkconfig atd --add 
chkconfig atd on
chkconfig --list atd
atd            	0:off	1:off	2:off	3:on	4:on	5:off	6:off

# then as root start it
service atd start

Using the at command add the job. The thing about this, to my mind is that you can’t specify a command with arguments as far as I am aware so you have to wrap all the commands in a script and point at to it using the -f parameter

at -f /usr/local/bin/service-start 7am tomorrow
at -f /usr/local/bin/service-stop 2pm tomorrow

Use atq to check to see if the job was added correctly


atq
2	2010-06-10 14:00 a root
1	2010-06-10 07:00 a root

You can list the contents of the at job using at <jobNum> -c

at 1 -c 

This is what at 1 -c spits out on my CentOS 5.x system

#!/bin/sh
# atrun uid=0 gid=0
# mail   myuser 0
umask 22
HOSTNAME=myhostname.domain.local; export HOSTNAME
SHELL=/bin/bash; export SHELL
HISTSIZE=1000; export HISTSIZE
USER=root; export USER
LS_COLORS=no=00:fi=00:di=00\;34:ln=00\;36:pi=40\;33:so=00\;35:bd=40\;33\;01:cd=40\;33\;01:or=01\;05\;37\;41:mi=01\;05\;37\;41:ex=00\;32:\*.cmd=00\;32:\*.exe=00\;32:\*.com=00\;32:\*.btm=00\;32:\*.bat=00\;32:\*.sh=00\;32:\*.csh=00\;32:\*.tar=00\;31:\*.tgz=00\;31:\*.arj=00\;31:\*.taz=00\;31:\*.lzh=00\;31:\*.zip=00\;31:\*.z=00\;31:\*.Z=00\;31:\*.gz=00\;31:\*.bz2=00\;31:\*.bz=00\;31:\*.tz=00\;31:\*.rpm=00\;31:\*.cpio=00\;31:\*.jpg=00\;35:\*.gif=00\;35:\*.bmp=00\;35:\*.xbm=00\;35:\*.xpm=00\;35:\*.png=00\;35:\*.tif=00\;35:; export LS_COLORS
MAIL=/var/spool/mail/root; export MAIL
PATH=/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin; export PATH
INPUTRC=/etc/inputrc; export INPUTRC
PWD=/usr/local/bin; export PWD
LANG=en_US.UTF-8; export LANG
SSH_ASKPASS=/usr/libexec/openssh/gnome-ssh-askpass; export SSH_ASKPASS
SHLVL=1; export SHLVL
HOME=/root; export HOME
LOGNAME=root; export LOGNAME
LESSOPEN=\|/usr/bin/lesspipe.sh\ %s; export LESSOPEN
G_BROKEN_FILENAMES=1; export G_BROKEN_FILENAMES
OLDPWD=/root; export OLDPWD
cd /usr/local/bin || {
	 echo 'Execution directory inaccessible' >&2
	 exit 1
}
${SHELL:-/bin/sh} << `(dd if=/dev/urandom count=200 bs=1 2>/dev/null|LC_ALL=C tr -d -c '[:alnum:]')`

#!/bin/sh

/usr/local/bin/servicerun start

2 Comments

  1. cwraig

    I often use sleep to run stuff later as in to turn my computer off in an hour (like a snooze timer)

    sleep 3600 && init 0

    This waits 3600 seconds (or 1 hour) and then shutsdown.

    Reply
    • james

      Good tip at is probably overkill for something you just want to run in a little while.

      Thanks Craig

      Reply

Trackbacks/Pingbacks

  1. Linux `at’ command – Part II – The Telarah Times - [...] I am looking at the Linux at command again. [...]

Submit a Comment

Your email address will not be published. Required fields are marked *

This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

The reCAPTCHA verification period has expired. Please reload the page.

You May Also Like…

Clear HSTS Settings in CHrome

Open chrome://net-internals/#hsts enter the domain in the query field and click Query to confirm it has HSTS settings...

Ubuntu on Hyper-v

It boils town to installing linux-azure # as root or sudo apt-get update apt-get install linux-azure...