如何使用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文件:

  1. 将它放在/etc/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. 您不需要在服务中使用sudo启动Spark,因为默认服务用户已经是root用户。

  2. 查看下面的链接以获取更多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://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