Il processo di Crontab inizia +1 min dopo @reboot


44

È necessario uno script eseguito ad ogni riavvio in +1 minuto. Ho messo un disco @rebootma è troppo presto per la mia sceneggiatura. Come eseguirlo dopo il riavvio?


3
Perché è troppo presto ? Forse uno script di init sarebbe più adatto (per quanto riguarda le dipendenze, ad esempio questo script ha bisogno di essere configurato per primo )?
sr_

la mia sceneggiatura deve essere eseguita dopo tutte le altre, l'ultima in parole brevi
Yurij73

poiché il tuo lavoro deve essere eseguito dopo tutto e poiché il concetto di tutto è abbastanza variabile (l'aggiunta di una nuova applicazione autostart @ reboot non è così insolita), penso che spetti a te inserire il tuo lavoro negli script rc in un modo che server il tuo scopo. Mettere la tua attività in fondo alle attività specificate in /etc/rc.local è di solito quello che vuoi, ma a seconda della configurazione di avvio del tuo sistema, questo potrebbe non essere vero per tutto il tempo. Quindi, testalo e vedi se funziona per te.
MelBurslan,

Sembra un caso per Upstart?
nafg

Risposte:


68

Lo script deve mai essere eseguito solo un minuto dopo l'avvio o può essere utilizzato anche in altre occasioni? Nel primo caso, è possibile aggiungere sleep 60all'inizio dello script o, nel secondo caso, aggiungerlo al file crontab:

@reboot sleep 60 && my_script.sh

Come è stato sottolineato da sr_, però, forse lo stai affrontando nel modo sbagliato, e uno script init.d o rc.d appropriato sarebbe una soluzione più solida.


1
Oppure utilizza un'opzione della riga di comando per modificare il ritardo (ad esempio, script -s Xche si tradurrebbe sleep Xall'interno dello script).
peterph

Posso applicarlo al file taskrunner in /etc/init.d/?
Andres Angel,

@AndresAngel - Mi dispiace, non lo so. Uso FreeBSD che non ha taskrunner, né, del /etc/init.d
resto

sul mio rhel7 il sonno non funziona affatto, dorme per sempre e non torna più.
Inder R Singh,

15

Se è necessario eseguire qualcosa dopo il riavvio quando la rete sarà disponibile, ad esempio, è possibile scrivere un'unità systemd che verrà eseguita al momento richiesto (ovviamente funzionerà solo su sistemi con systemd).

Per fare ciò, creare un file /etc/systemd/system/my_script.servicecon i seguenti contenuti:

[Unit]
Description=My script that requires network
After=network.target

[Service]
Type=oneshot
ExecStart=/full/path/to/my_script.sh

[Install]
WantedBy=multi-user.target

Quindi eseguire:

sudo systemctl daemon-reload
sudo systemctl enable my_script

Hai finito!


11

Vorrei usare at. Come in:

@reboot echo /root/bin/do_the_stuff | at now + 2 minutes
# at assigns it an execution time truncated to whole minutes,
# so this means it will execute in 1--2 minutes.

... con l'aggiunta del detto avvertimento che se ciò che vuoi veramente è eseguirlo dopo tutte le altre cose, dovresti controllare come farlo nell'init che il tuo sistema operativo sta usando.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.