Come eseguo un singolo comando all'avvio usando systemd?

43

Ho avuto qualche difficoltà nel cercare di capire come usare systemd.

Mi piacerebbe avviare un cluster Apache Spark dopo l'avvio usando il seguente comando:

sudo ./path/to/spark/sbin/start-all.sh

Quindi esegui questo comando quando il sistema si prepara a riavviare / spegnere:

sudo ./path/to/spark/sbin/stop-all.sh

Esiste qualche tutorial per systemd?

Non riesco a trovare nulla di utile per iniziare o un modello di base su cui posso costruire.

Ho provato ad usare un estremamente semplice (file: /lib/systemd/system/spark.service):

[Unit]
Description=Spark service

[Service]
ExecStart=sudo ./path/to/spark/sbin/start-all.sh

Che non funziona.

Qualsiasi aiuto è molto apprezzato!

    
posta macourtney7 26.05.2017 - 10:54
fonte

1 risposta

54

Il tuo file .service dovrebbe apparire così:

[Unit]
Description=Spark service

[Service]
ExecStart=/path/to/spark/sbin/start-all.sh

[Install]
WantedBy=multi-user.target

Ora fai qualche altro passaggio per abilitare e utilizzare il file .service :

  1. Posizionalo nella cartella /etc/systemd/system con dire un nome di myfirst.service

  2. Rendi lo script eseguibile con:

    chmod u+x /path/to/spark/sbin/start-all.sh
    
  3. Avvia:

    sudo systemctl start myfirst
    
  4. Abilitalo all'avvio:

    sudo systemctl enable myfirst
    
  5. Ferma:

    sudo systemctl stop myfirst
    

Note:

  1. Non è necessario avviare Spark con sudo nel tuo servizio, poiché l'utente del servizio predefinito è già root.

  2. Guarda i link sottostanti per maggiori opzioni di systemd .

UPDATE

Ora quello che abbiamo sopra è solo rudimentale, ecco una configurazione completa per la scintilla:

[Unit]
Description=Apache Spark Master and Slave Servers
After=network.target
After=systemd-user-sessions.service
After=network-online.target

[Service]
User=spark
Type=forking
ExecStart=/opt/spark-1.6.1-bin-hadoop2.6/sbin/start-all.sh
ExecStop=/opt/spark-1.6.1-bin-hadoop2.6/sbin/stop-all.sh
TimeoutSec=30
Restart=on-failure
RestartSec=30
StartLimitInterval=350
StartLimitBurst=10

[Install]
WantedBy=multi-user.target

Per configurare il servizio:

sudo systemctl start spark.service
sudo systemctl stop spark.service
sudo systemctl enable spark.service

Ulteriori letture

Leggi i seguenti link. Spark è una configurazione complessa, quindi dovresti capire come si integra con il servizio init di Ubuntu.

link

link

link

    
risposta data George Udosen 26.05.2017 - 11:11
fonte

Leggi altre domande sui tag