linux - script - ubuntu eseguire comandi all avvio




Come eseguire uno script di shell all'avvio (10)

Basta aggiungere una riga al tuo crontab ..

Assicurati che il file sia eseguibile:

chmod +x /path_to_you_file/your_file

Per modificare il file crontab:

crontab -e

Linea che devi aggiungere:

@reboot  /path_to_you_file/your_file

Così semplice!

Su un'istanza di Amazon Linux, ho due script chiamati start_my_app e stop_my_app che si avviano e si fermano forever (che a sua volta esegue la mia app node.js). Uso questi script per avviare e interrompere manualmente l'app del mio nodo. Fin qui tutto bene.

Il mio problema: voglio anche configurarlo in modo tale che start_my_app venga eseguito ogni volta che il sistema si avvia. So che ho bisogno di aggiungere un file all'interno di init.d e so come collegarlo alla directory corretta all'interno di rc.d , ma non riesco a capire cosa debba effettivamente andare dentro il file che inserisco in init.d . Penso che dovrebbe essere solo una riga, come, start_my_app , ma non ha funzionato per me.


Il metodo più semplice in assoluto se tutto ciò che si vuole eseguire è un semplice script, (o qualsiasi altra cosa) è se si dispone di una GUI per usare le preferenze di sistema> quindi le app di avvio.

basta sfogliare la sceneggiatura che si desidera e ci si va. (rendere eseguibile lo script)


Inserisci cron usando sudo :

sudo crontab -e

Aggiungi un comando da eseguire all'avvio, in questo caso uno script:

@reboot sh /home/user/test.sh

Salvare:

Premi ESC poi: x per salvare e uscire, o premi ESC poi ZZ (che è shift + zz)

Test Test Test :

  1. Esegui lo script di test senza cron per assicurarti che funzioni effettivamente.

  2. Assicurati di aver salvato il comando in cron, usa sudo crontab -e

  3. Riavvia il server per confermare che tutto sudo @reboot


Nel file che hai inserito in /etc/init.d/ devi impostarlo eseguibile con:

chmod +x /etc/init.d/start_my_app

Grazie a @meetamit, se questo non funziona devi creare un link simbolico a /etc/rc.d/

ln -s /etc/init.d/start_my_app /etc/rc.d/

Si prega di notare che sull'ultimo Debian, questo non funzionerà in quanto lo script deve essere conforme a LSB (fornire almeno le seguenti azioni: start, stop, restart, force-reload e status): https://wiki.debian.org/LSBInitScripts

Come nota, dovresti mettere il percorso assoluto del tuo script invece di uno relativo, può risolvere problemi imprevisti:

/var/myscripts/start_my_app

E non dimenticare di aggiungere sopra quel file:

#!/bin/sh

Puoi farlo :

chmod +x PATH_TO_YOUR_SCRIPT/start_my_app 

quindi usa questo comando

update-rc.d start_my_app defaults 100

Si prega di consultare questa pagina su Cyberciti .


Questo è il modo in cui lo faccio sui sistemi a cappello rosso

Metti il ​​tuo script in /etc/init.d , di proprietà di root ed eseguibile. Nella parte superiore dello script, puoi dare una direttiva per chkconfig . Esempio, lo script seguente viene utilizzato per avviare un'applicazione java come utente oracle.

Il nome dello script è /etc/init.d/apex

#!/bin/bash
# chkconfig: 345 99 10
# description: auto start apex listener
#
case "$1" in
 'start')
   su - oracle -c "cd /opt/apex ; java -jar apex.war > logs/apex.log 2>logs/apex_error.log &";;
 'stop')
   echo "put something to shutdown or kill the process here";;
esac

questo dice che lo script deve essere eseguito ai livelli 3, 4 e 5 e la priorità per l'avvio / arresto è 99 e 10.

quindi, come utente root puoi usare chkconfig per abilitare o disabilitare lo script all'avvio,

chkconfig --list apex
chkconfig --add apex

e puoi usare il servizio start / stop apex


Un'altra opzione è avere un comando @reboot nel tuo crontab.

Non tutte le versioni di cron supportano questo, ma se l'istanza è basata sull'AMI di Amazon Linux, funzionerà.


per alcune persone questo funzionerà Potresti semplicemente aggiungere il seguente comando in Sistema> Preferenze> Applicazioni di avvio:

bash /full/path/to/your/script.sh

This semplice soluzione ha funzionato per me su un'istanza Amazon Linux con CentOS. Modifica il tuo /etc/rc.d/rc.local file e metti il ​​comando lì. In questo file viene menzionato che verrà eseguito dopo tutti gli altri script di init. Quindi, fai attenzione in merito. Questo è il modo in cui il file mi cerca al momento. . L'ultima riga è il nome del mio script.


Crea il tuo / init eseguibile

Questo non è quello che vuoi, ma è divertente!

Scegli un file eseguibile arbitrario, anche uno script di shell , e avvia il kernel con il parametro della riga di comando:

init=/path/to/myinit

Verso la fine dell'avvio, il kernel Linux esegue il primo eseguibile userspace nel percorso specificato.

Diversi progetti forniscono i più popolari eseguibili di init utilizzati dalle maggiori distro, ad esempio systemd, e nella maggior parte delle distro init porteranno un sacco di processi usati nel normale funzionamento del sistema.

Ma possiamo dirottarlo /init per eseguire i nostri script minimi per capire meglio il nostro sistema.

Ecco una configurazione minima riproducibile: https://github.com/cirosantilli/linux-kernel-module-cheat/tree/f96d4d55c9caa7c0862991025e1291c48c33e3d9/README.md#custom-init







forever