web-dev-qa-db-fra.com

Exécuter une commande à une heure précise

J'essaie d'exécuter une commande à un moment donné. J'ai regardé la commande "at", mais je ne sais pas comment le faire fonctionner ...

Voici ce que je fais:

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

Mais comment puis-je faire cela dans un script bash? Je veux dire, je dois appuyer sur Entrée et sur "Ctrl + D" pour configurer le délai ... Comment faire cela dans un script?

Toutes les suggestions les bienvenues.

Merci d'avance,

20
Eamorr

Vous pouvez essayer ceci:

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

edit si vous voulez exécuter Firefox, essayez ceci:

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

Vous pouvez renvoyer votre commande dans at en tant qu'entrée:

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

Dans bash ou zsh vous pouvez dire

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

A défaut, vous devez utiliser un document here:

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

Vous voudrez peut-être aussi rechercher dans cron des tâches planifiées régulièrement; l’entrée crontab ressemblerait à

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

(EDIT: whoops, aide à rappeler quelle version de at. Je pense que cela aurait pu être un mod. Local.)

7
geekosaur

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

2
drysdam

La commande at n'est pas installée par défaut sur les systèmes sur lesquels je travaille (Ubuntu, RHEL) et je ne dispose pas des autorisations pour installer un nouveau logiciel. J'utilise donc des scripts combinant bash et awk afin de réaliser le at fonctionnalité comme suit:

#! /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]

1
funk