Come posso eseguire un comando dopo l'avvio?


27

Vorrei eseguire il semplice comando shell echo 1 > /proc/sys/kernel/sysrqad ogni avvio, per abilitare le chiavi sysrq. Quando all'avvio dovrebbe essere fatto questo, e dove dovrei mettere uno script per farlo?


Tutte le distribuzioni Linux impostano già l'ora. Forse la batteria del tuo RTC sulla scheda madre è scarica?
Qualche programmatore amico,

@JoachimPileborg in realtà non c'è RTC sulla mia scheda madre :) È una scheda di sistema integrata senza RTC.


2
Mi permetto di dissentire, @davidgo. I riferimenti che stai citando sono un po 'obsoleti: mentre crontab funziona, /etc/rc.local non funziona su systemddistribuzioni come Arch Linux. Facendo riferimento a loro, potremmo inviare Demetri in una caccia all'oca selvatica. Alcuni aggiornamenti, a volte, devono essere fatti.
MariusMatutiae l'

Risposte:


37

Dipende dalle distro.

Se ti trovi su distribuzioni derivate da Debian, ci sono almeno due posti corretti, /etc/rc.local e crontab. Puoi invocare crontab come root,

   crontab -e

e quindi inserire questa riga

   @reboot /home/my_name/bin/my_command

dove my_commandè un file eseguibile ( chmod 755 my_command).

In alternativa, puoi posizionare una linea come questa

   /home/my_name/bin/my_command

in /etc/rc.local, e questo verrà eseguito per ultimo. In ogni caso, ti preghiamo di ricordare che stai utilizzando l'ambiente root, non il tuo. Anche per questo motivo, è meglio usare percorsi assoluti.

Se sei su una distribuzione systemd (Arch Linux, Fedora 19, ...) la prima opzione (crontab) è ancora valida, mentre la seconda (/etc/rc.local) non esiste più. In questo caso, dovresti imparare come avviare un servizio da gestire systemctl, ma questo potrebbe essere più di quanto ti aspettassi con la tua semplice domanda.


1
Puoi confermarlo per Fedora? La mia ricerca mi dice che rc.local funzionerà ancora se esiste ed è eseguibile, ma non è impostato di default. Ho percepito inquietanti ramificazioni se rc.local non funziona! (Ho trovato solo riferimenti per questo per Fedora 18 - forums.fedoraforum.org/showthread.php?t=291889 )
davidgo

Hai ragione, in Fedora 19 potresti ancora averlo, se lo vuoi davvero. Ma non è più impacchettato, docs.fedoraproject.org/en-US/Fedora/16/html/Release_Notes/… bullet 3.2.4. Inoltre, non esiste affatto in Arch Linux, quindi ho pensato che fosse sicuro includere un avvertimento al riguardo.
MariusMatutiae l'

2
forse questo è un alias sconosciuto per me ma @bootnon esiste, solo @reboot debianhelp.co.uk/crontab.htm
Zarathustra

19

Se il tuo sistema esegue una versione cronche lo supporta (in particolare Vixie cron), puoi utilizzarlo @rebootin un processo cron.

Questa è una delle 8 stringhe speciali che supporta.

Citando la crontab(5)pagina man (dal mio sistema Ubuntu 12.04):

Invece dei primi cinque campi, potrebbe apparire una delle otto stringhe speciali:

string         meaning
------         -------
@reboot        Run once, at startup.
@yearly        Run once a year, "0 0 1 1 *".
@annually      (same as @yearly)
@monthly       Run once a month, "0 0 1 * *".
@weekly        Run once a week, "0 0 * * 0".
@daily         Run once a day, "0 0 * * *".
@midnight      (same as @daily)
@hourly        Run once an hour, "0 * * * *".

Si noti che l'avvio, per quanto @rebootriguarda, è il momento in cui l' avvio del demone cron (8) . In particolare, potrebbe essere prima dell'avvio di alcuni daemon di sistema o di altre strutture. Ciò è dovuto alla sequenza dell'ordine di avvio della macchina.

Questo è ben lungi dall'essere l' unico modo per eseguire qualcosa all'avvio, ma è un'alternativa.


2
Come può essere stata scritta questa risposta più di un anno prima della domanda originale?
MariusMatutiae,


+1 per specificare che richiede Vixie cron.
Javier Arias,

10

Praticamente tutte le varianti di Linux (che risalgono a molto, molto tempo fa) hanno un file /etc/rc.local che gira all'avvio - puoi semplicemente aggiungere il comando ad esso.

Detto questo, non è nemmeno necessario farlo. Il modo "corretto" sarebbe quello di modificare / aggiungere la riga kernel.sysrq = 1 in /etc/sysctl.conf

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.