Como executo um único comando na inicialização usando o systemd?

57

Eu tenho tido algumas dificuldades em entender como usar o systemd.

Gostaria de inicializar um cluster do Apache Spark após a inicialização usando o seguinte comando:

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

Em seguida, execute este comando quando o sistema se preparar para reinicializar / desligar:

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

Existe algum tutorial para o systemd?

Parece que não consigo encontrar nada de útil para começar ou um modelo básico que eu possa construir.

Eu tentei usar um arquivo extremamente simples (file: /lib/systemd/system/spark.service):

[Unit]
Description=Spark service

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

O que não funciona.

Qualquer ajuda é muito apreciada!

    
por macourtney7 26.05.2017 / 10:54

1 resposta

69

Seu arquivo .service deve ficar assim:

[Unit]
Description=Spark service

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

[Install]
WantedBy=multi-user.target

Agora, siga mais algumas etapas para ativar e usar o arquivo .service :

  1. Coloque-o na pasta /etc/systemd/system com um nome de myfirst.service

  2. Torne seu script executável com:

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

    sudo systemctl start myfirst
    
  4. Ativar para ser executado na inicialização:

    sudo systemctl enable myfirst
    
  5. Pare com isso:

    sudo systemctl stop myfirst
    

Notas:

  1. Você não precisa iniciar o Spark com o sudo em seu serviço, pois o usuário do serviço padrão já é root.

  2. Veja os links abaixo para mais opções systemd .

UPDATE

Agora, o que temos acima é apenas rudimentar, aqui está uma configuração completa para a faísca:

[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

Para configurar o serviço:

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

Outras leituras

Por favor, leia os links a seguir. O Spark é uma configuração complexa, então você deve entender como ele se integra ao serviço init do Ubuntu.

link

link

link

    
por George Udosen 26.05.2017 / 11:11