Pianifica in modo conveniente un comando da eseguire in un secondo momento?

77

Che cos'è un modo semplice per eseguire un comando, ad esempio, tra 8 ore? Posso pensare in questo modo:

nohup bash -c "sleep 28800 ; ./mycommand.sh" &

C'è un modo più "corretto"?

    
posta Steve Bennett 30.08.2013 - 13:25

4 risposte

110

Puoi usare il comando at . % Co_de% esegue i comandi in un secondo momento. L'utilità at deve leggere i comandi dallo standard input e raggrupparli insieme come at-job, per essere eseguiti in un secondo momento.

Di solito, at è installato di default in Ubuntu, ma se la tua versione non lo include, installa tramite:

sudo apt-get install at

Per ulteriori informazioni, opzioni, esempi e altri vedi il repository di Manpage di Ubuntu

Esempio:

at now +8 hours -f ~/myscript.sh

Puoi anche usare comode abbreviazioni, come at o tomorrow , come in

echo "tweet fore" | at teatime 

Avviso: Questo eseguirà il comando a sinistra della pipe immediatamente ma presenterà il suo output solo in un secondo momento. L'esempio mostra anche come è possibile reindirizzare le azioni in noon . at è il modo in cui puoi esaminare le azioni pianificate, che puoi comodamente elencare con il loro numero, come con:

at -c 3
    
risposta data Mitch 30.08.2013 - 13:39
9

Sì, puoi impostare un cron job.

Ad esempio se ora l'ora è 14:39:00 e oggi è venerdì, 30 agosto, puoi aggiungere il seguente cron job (da eseguire dopo 8 ore) nel tuo file crontab usando crontab -e comando:

39 22 30 8 5  /path/to/mycommand.sh

Ulteriori informazioni su:

risposta data Radu Rădeanu 30.08.2013 - 13:34
7

Utilizza la GUI basata su Gnome per cron , at e simili:

L'introduzione di CronHowto suggerisce di usare gnome-schedule gui, che è molto più bello che digitare tutta la spazzatura in il terminale (specialmente per gli utenti "medi" di Ubuntu che non sono utenti "power" * nix / bsd.)

Eseguilo utilizzando Unity Dash (o il menu di altre applicazioni) per cercare Attività pianificate o eseguire gnome-schedule .

% Bl0ck_qu0te%

Usando gnome-schedule , per uno script nella tua home directory, un nuovo comando "at" verrebbe impostato usando questo tipo di finestra:

    
risposta data user29020 16.07.2014 - 21:20
3

Ho scoperto un modo veloce e sporco per farlo prima di aver scoperto che at era una cosa.

Supponiamo che tu voglia eseguire lo script a mezzogiorno:

until [[ "$(date)" =~ "12:00:" ]]; do
    sleep 10
done
./mycommand.sh

Dì che vuoi che venga eseguito domani a mezzogiorno (oggi è il 24 novembre per me):

until [[ "$(date)" =~ "25 12:00:" ]]; do 
    sleep 30
done
./mycommand.sh
    
risposta data wjandrea 24.11.2015 - 07:07

Leggi altre domande sui tag