it-swarm.com.de

Führen Sie einen Befehl zu einer bestimmten Zeit aus

Ich versuche, einen Befehl zu einem bestimmten Zeitpunkt auszuführen. Ich habe mir das "at" -Befehl angesehen, weiß aber nicht, wie ich es zum Laufen bringen kann ...

Folgendes mache ich:

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

Aber wie mache ich das in einem Bash-Skript? Ich meine, ich muss die Eingabetaste und "Strg + D" drücken, um die Verzögerung einzustellen ... Wie kann ich das in einem Skript tun?

Irgendwelche Vorschläge sind herzlich willkommen.

Danke im Voraus,

20
Eamorr

Sie könnten dies versuchen:

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

edit Wenn Sie Firefox ausführen möchten, versuchen Sie Folgendes:

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

Sie können Ihren Befehl in at als Eingabe wiederholen:

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

In bash oder zsh kann man sagen

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

Andernfalls müssen Sie ein Here-Dokument verwenden:

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

Möglicherweise möchten Sie auch cron für regelmäßig geplante Jobs prüfen. Der crontab-Eintrag würde aussehen

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

(EDIT: whoops, hilft, sich an welche Version von at zu erinnern. Ich denke, das war möglicherweise ein lokaler Mod.)

7
geekosaur

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

2
drysdam

Der Befehl at ist auf den von mir arbeitenden Systemen (Ubuntu, RHEL) nicht standardmäßig installiert, und ich habe keine Berechtigung zum Installieren neuer Software. Daher verwende ich Skripts, die bash und awk kombinieren, um das zu erreichen. at Funktionalität wie folgt:

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