如何使用systemd在启动时运行单个命令?
我在尝试理解如何使用systemd时遇到了一些困难。
我想在启动后使用以下命令启动Apache Spark集群:
sudo ./path/to/spark/sbin/start-all.sh
然后在系统准备重启/关闭时运行此命令:
sudo ./path/to/spark/sbin/stop-all.sh
是否有systemd的教程?
我似乎无法找到任何有用的入门或我可以构建的基本模板。
我试过使用一个非常简单的(文件:/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
文件:
-
将它放在
/etc/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
笔记:
-
您不需要在服务中使用sudo启动Spark,因为默认服务用户已经是root用户。
-
查看下面的链接以获取更多
systemd
选项。
UPDATE
现在我们上面的内容只是简单的,这里有一个完整的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