Я хотел бы запустить кластер 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
Который не работает.
Ваш .service
файл должен быть похожим на это:
[Unit]
Description=Spark service
[Service]
ExecStart=/path/to/spark/sbin/start-all.sh
[Install]
WantedBy=multi-user.target
Теперь сделайте еще несколько шагов, чтобы включить и использовать .service
файл:
Поместите его в /lib/systemd/system
папка с говорит что название myfirst.service
Сделайте тот свой исполняемый файл сценария с:
chmod u+x /path/to/spark/sbin/start-all.sh
Запустите его:
sudo systemctl start myfirst
Позвольте этому работать при начальной загрузке:
sudo systemctl enable myfirst
Прекрати:
sudo systemctl stop myfirst
Вы не должны запускать Spark с sudo в Вашем сервисе, поскольку пользователь услуги по умолчанию является уже корневым.
Посмотрите на ссылки ниже для больше 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://www.digitalocean.com/community/tutorials/understanding-systemd-units-and-unit-files
https://www.freedesktop.org/software/systemd/man/systemd.unit.html
как преобразовать этот .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
Это создает и работает /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