Как я выполняю единственную команду при запуске с помощью systemd?

Я хотел бы запустить кластер Spark Apache после начальной загрузки с помощью следующей команды:

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

Затем выполните эту команду, когда система подготовится перезагружать/завершать работу:

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

Как я могу начать? Существует ли основной шаблон, на котором я могу основываться?

Я попытался использовать чрезвычайно простое (файл: /lib/systemd/system/spark.service):

[Unit]
Description=Spark service

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

Который не работает.

113
задан 9 March 2019 в 01:39

3 ответа

Ваш .service файл должен быть похожим на это:

[Unit]
Description=Spark service

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

[Install]
WantedBy=multi-user.target

Теперь сделайте еще несколько шагов, чтобы включить и использовать .service файл:

  1. Поместите его в /lib/systemd/system папка с говорит что название myfirst.service

  2. Сделайте тот свой исполняемый файл сценария с:

    chmod u+x /path/to/spark/sbin/start-all.sh
    
  3. Запустите его:

    sudo systemctl start myfirst
    
  4. Позвольте этому работать при начальной загрузке:

    sudo systemctl enable myfirst
    
  5. Прекрати:

    sudo systemctl stop myfirst
    

Примечания:

  1. Вы не должны запускать Spark с sudo в Вашем сервисе, поскольку пользователь услуги по умолчанию является уже корневым.

  2. Посмотрите на ссылки ниже для больше systemd опции.

ОБНОВЛЕНИЕ

Теперь то, что мы имеем выше, является просто элементарным, вот полная установка для искры:

[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

Устанавливать сервис:

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

Дальнейшее чтение

Прочитайте следующие ссылки. Spark является сложной установкой, таким образом, необходимо понять, как он интегрируется с init сервисом Ubuntu.

https://datasciencenovice.wordpress.com/2016/11/30/spark-stand-alone-cluster-as-a-systemd-service-ubuntu-16-04centos-7/

https://www.digitalocean.com/community/tutorials/understanding-systemd-units-and-unit-files

https://www.freedesktop.org/software/systemd/man/systemd.unit.html

145
ответ дан 9 March 2019 в 11:39

как преобразовать этот .conf в .service?

# masterserver - start master server service 

description "Service that starts master.sh"
author "<hadjieff>"

# When to start the service
start on runlevel [2345]

# When to stop the service
stop on runlevel [016]

# Automatically restart process if crashed
respawn

# Essentially lets upstart know the process will detach itself to the background
expect fork

# Run before process
pre-start script
    # Put bash code here if necessary
end script

# Start the process
script
    cd /home/hadjieff/hadjieff/server
    sudo java -Djava.security.policy=security.policy -Djava.rmi.server.hostname=192.168.1.91  -cp . -jar Registar.jar --xbee=true --test=false
end script
0
ответ дан 16 April 2019 в 01:19

Это создает и работает /root/boot.sh на начальной загрузке (как корень) использование минимального сервисного файла:

bootscript=/root/boot.sh
servicename=customboot

cat > $bootscript <<EOF
#!/usr/bin/env bash
echo "$bootscript ran at \$(date)!" > /tmp/it-works
EOF

chmod +x $bootscript

cat > /etc/systemd/system/$servicename.service <<EOF
[Service]
ExecStart=$bootscript
[Install]
WantedBy=default.target
EOF

systemctl enable $servicename

Вы можете copy+paste это в корневой терминал.

Изменить параметры, например, использовать другое $bootscript, набор, что переменная вручную и просто пропускает ту строку при копировании команд.

После выполнения команд можно отредактировать сценарий начальной загрузки с помощью любимого редактора, и это будет работать на следующей начальной загрузке. Можно также сразу выполнить его при помощи:

systemctl start $servicename
3
ответ дан 22 November 2019 в 22:59

Другие вопросы по тегам:

Похожие вопросы: