Qual è un modo semplice per eseguire un comando, diciamo, tra 8 ore da ora? Posso pensare in questo modo:
nohup bash -c "sleep 28800 ; ./mycommand.sh" &
Esiste un modo più "corretto"?
Qual è un modo semplice per eseguire un comando, diciamo, tra 8 ore da ora? Posso pensare in questo modo:
nohup bash -c "sleep 28800 ; ./mycommand.sh" &
Esiste un modo più "corretto"?
Risposte:
Puoi usare il at
comando La at
eseguire comandi in un secondo momento. L' at
utilità deve leggere i comandi dall'input standard e raggrupparli come un lavoro, da eseguire 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 altro, consultare il repository Manpage di Ubuntu
Esempio:
at now +8 hours -f ~/myscript.sh
Puoi anche usare comode shorthands, come tomorrow
o noon
, come in
echo "tweet fore" | at teatime
Avvertenza: questo eseguirà immediatamente il comando a sinistra della pipema presenterà il suo output solo in seguito. L'esempio mostra anche come è possibile reindirizzare le azioniat
. at -c
è il modo in cui puoi esaminare le azioni programmate, che puoi elencare comodamente con il loro numero, come con:
at -c 3
at now +8 hours -f ~/myscript.sh
at 8:00
necessario eseguire il comando in un momento assoluto e batch
per "quando sembra che il computer sia inattivo"
teatime
è alle 16:00. Per alcuni motivi non è menzionato in manpages.ubuntu.com/manpages/raring/man1/at.1posix.html ma è presente man at
e qui manpages.ubuntu.com/manpages/raring/en/man1/at.1.html .
gpio write 8 1
ma è stato eseguito immediatamente.
Sì, è possibile impostare un processo cron.
Ad esempio, se ora sono le 14:39:00 e oggi è venerdì, 30 agosto, puoi aggiungere il seguente cron job (da eseguire dopo 8 ore) nel tuo file crontab usando il crontab -e
comando:
39 22 30 8 5 /path/to/mycommand.sh
Di più:
crontab
fino a quando non lo rimuoverai. Un anno dopo, quando avrai dimenticato chi l'ha messo lì e perché, rimarrai a grattarti la testa chiedendoti cosa fare con il comando.
Utilizzare l'interfaccia grafica Gnome-based per cron
, at
e simili:
L'introduzione di CronHowto suggerisce di usare la gnome-schedule
gui, che è molto più bella che digitare tutta la spazzatura nel terminale (specialmente per gli utenti Ubuntu "medi" che non sono "power" * utenti nix / bsd).
Eseguilo utilizzando Unity Dash (o il menu di altre applicazioni) per cercare attività pianificate o in esecuzione gnome-schedule
.
Sui sistemi Ubuntu basati su Gnome Gnome Strumento attività pianificate (dal pacchetto gnome-schedule) in Applicazioni -> Strumenti di sistema fornisce un'interfaccia grafica con la richiesta di utilizzare Cron. Il sito web del progetto è http://gnome-schedule.sourceforge.net/ ; il software è installabile dal Software Center o digitando
sudo apt-get install gnome-schedule
in un terminale.
Usando gnome-schedule
, per uno script nella tua home directory, un nuovo comando "at" verrebbe impostato usando questo tipo di finestra:
Ho trovato un modo rapido e sporco per farlo prima di scoprire che at
era una cosa.
Supponiamo che tu voglia eseguire lo script a mezzogiorno:
until [[ "$(date)" =~ "12:00:" ]]; do
sleep 10
done
./mycommand.sh
Di 'che vuoi che funzioni domani a mezzogiorno (oggi è il 24 novembre per me):
until [[ "$(date)" =~ "25 12:00:" ]]; do
sleep 30
done
./mycommand.sh
Aggiornamento : metodo leggermente migliore: prova solo i numeri che ti interessano, usando date +FORMAT
:
until [[ $(date +%H:%M) == 21:06 ]]; do
...
at
, cron
o qualsiasi altra applicazione vera e propria pianificazione. La pianificazione delle attività è difficile e non è una ruota che dovresti reinventare.
at
.
at
è perché i suoi lavori sopravvivranno al riavvio.
nohup
+sleep
? Perché è "improprio"?