问题描述
我想在启动后使用以下命令启动 Apache Spark 集群:
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
文件:
-
将其放在名称类似于
myfirst.service
的/etc/systemd/system
文件夹中。\n -
确保您的脚本可执行:
\n
chmod u+x /path/to/spark/sbin/start-all.sh\n
\n
-
启动它:
\n
sudo systemctl start myfirst\n
\n
-
让它在开机时运行:
\n
sudo systemctl enable myfirst\n
\n
-
停下来:
\n
sudo systemctl stop myfirst\n
\n
说明
-
您不需要在您的服务中使用
sudo
启动 Spark,因为默认服务用户已经是 root。\n -
查看下面的链接以获取更多
systemd
选项。\n
Moreover
现在我们上面的只是基本的,这里是 spark 的完整设置:
[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 是一个复杂的设置,因此您应该了解它如何与 Ubuntu 的 init 服务集成。
-
https://www.digitalocean.com/community/tutorials/understanding-systemd-units-and-unit-files
-
https://www.freedesktop.org/software/systemd/man/systemd.unit.html
次佳方案
Copy-paste 进入终端(作为 root)以创建 /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
要修改参数,例如使用不同的 $bootscript
,只需手动设置该变量并在复制命令时跳过该行。
运行命令后,您可以使用您喜欢的编辑器编辑 /root/boot.sh
,它将在下次启动时运行。您也可以使用以下命令立即运行它:
systemctl start $servicename