Eamorr
Eamorr

Reputation: 10012

Run a command at a specific time

I'm trying to run a command at a specific time. I've looked at the "at" command, but I don't know how to get it working...

Here's what I do:

at 1843 (Enter)
php /run/this/script.php (Ctrl+D)

But how do I do this in a bash script? I mean, I need to press enter and "Ctrl+D" to set up the delay... How to do this in a script?

Any suggestions most welcome.

Thanks in advance,

Upvotes: 25

Views: 54483

Answers (5)

funk
funk

Reputation: 2287

The at command is not installed by default to the systems I work (Ubuntu, RHEL) and I don't have permissions to install new software, so I use scripts that combine bash and awk in order to achieve the at functionality as follows:

#! /bin/bash

res=""
while [ ! $res ]; do

    res=$( date | awk -v hour=$1 -v min=$2 '{ 

        split($4, tmp, ":" );

        if( (tmp[1] == hour) && (tmp[2] == min) )
        {
            print "ok";   
        }
        else
        {
            print "";
        }

    }' )

done

./atReplacement.sh $HOUR $MIN; [OTHER_COMMANDS]

Upvotes: 1

Michael Berkowski
Michael Berkowski

Reputation: 270609

You can echo your command into at as input:

echo "/usr/bin/php /run/this/script.php" | at 18:43

Upvotes: 34

Pointy
Pointy

Reputation: 413712

You could try this:

at 1843 <<_EOF_
php /run/this/script.php
_EOF_

edit if what you want to do is run Firefox, try this:

at 1843 <<_EOF_
DISPLAY=:0.0 /usr/bin/firefox
_EOF_

Upvotes: 13

geekosaur
geekosaur

Reputation: 61369

In bash or zsh you can say

at 1843 <<< 'php /run/this/script.php'

Failing that, you need to use a here document:

at 1843 <<EOF
php /run/this/script.php
EOF

You might also want to look into cron for regularly scheduled jobs; the crontab entry would look like

43 18 * * * php /run/this/script.php

(EDIT: whoops, helps to recall which version of at. I think that may have been a local mod.)

Upvotes: 8

drysdam
drysdam

Reputation: 8637

echo "php /run/this/script.php" | at 18:43

Upvotes: 2

Related Questions