Systemd配置开机自启动,执行shell脚本

 我以自己的需求为例配置开机自启动:需要启动3个nodered程序

一、编写shell脚本

我的目录结果如下:

Systemd配置开机自启动,执行shell脚本_第1张图片

1.首先编写启动程序的shell脚本

sudo vi nodered.sh

nodered.sh的内容如下:

#!/bin/bash
 
cd /usr/local/node/converyor/
echo '123456' | sudo -S nohup node-red -p 8888 -u /usr/local/node/converyor/ &
cd /usr/local/node/crane/
echo '123456' | sudo -S nohup node-red -p 7777 -u /usr/local/node/crane/ &
cd /usr/local/node/RGV/
echo '123456' | sudo -S nohup node-red -p 9999 -u /usr/local/node/RGV/ &
cd..
echo "node-red 启动完成"

 需要说明的是,实现sudo自动输入密码的脚本如下,-S表示需要输入参数(密码)  ,其中123456为密码:

echo '123456' | sudo -S nohup node-red -p 8888 -u /usr/local/node/converyor/ &

若是root用户可忽略sudo相关操作 ,直接将语句改成如下即可:

nohup node-red -p 8888 -u /usr/local/node/converyor/ &

2.再编写两个shell脚本,用于启动nodered和重启nodered,都会使用到上面的nodered.sh文件。

2.1第一个启动脚本 start.sh 内容如下

str=$"\n"
echo '123456' | sudo -S nohup sh /usr/local/node/nodered.sh >/dev/null 2>&1 &
sstr=$(echo  $str)
echo $sstr
echo "node-red 启动完成"

此处有一个小技巧,为了解决nohup方式后台启动程序,会需要手动点一下回车的问题,在原nodered.sh上加了输出换行符的语句。(在nodered.sh中没起作用,所以放到了start.sh中。。。)

2.2第二个重启脚本restart.sh内容如下

str=$"\n"
echo '123456' | sudo -S kill -9 `ps -ef | grep node-red | grep -v "grep" | awk '{print $2}'`
echo '123456' | sudo -S nohup sh /usr/local/node/nodered.sh >/dev/null 2>&1 &
sstr=$(echo  $str)
echo $sstr
echo "node-red 启动完成"

其中我使用的这种  kill  方式同时会杀掉子进程,详细可以自己查阅:

kill -9 `ps -ef | grep node-red | grep -v "grep" | awk '{print $2}'`

二.开始编写Systemd配置开机执行的nodered.service文件

进入目录/etc/systemd/system,创建文件 vi nodered.service,内容如下:

[Unit]
Description=nodered开机启动

[Service]
Type=simple
EnvironmentFile=-/usr/local/node
ExecStart=sh usr/local/node/start.sh
ExecReload=sh /usr/local/node/restart.sh
KillMode=process
Restart=on-failure
RestartSec=42s

[Install]
WantedBy=multi-user.target

其中ExecStart 表示启动命令(需指定全路径), ExecReload表示重启命令(需指定全路径)。

我这里指定的就是刚刚第一步创建的usr/local/node/start.sh,和usr/local/node/restart.sh文件

三. 接下来就可以将nodered.service加到开机自启服务中

1.重新载入systemd服务,执行命令

sudo systemctl daemon-reload

2.设置开机自启动

sudo systemctl enable nodered

3.启动nodered.service服务

sudo systemctl start nodered.service

(其中重启服务命令为:sudo systemctl restart nodered.service)

4.查看服务状态

sudo systemctl status nodered.service

5.启动成功如下:

Systemd配置开机自启动,执行shell脚本_第2张图片

6.重启电脑,验证是否配置成功

reboot now

7.重启完成,查看进程如下,说明启动成功!!

ps -ef|grep node-red

Systemd配置开机自启动,执行shell脚本_第3张图片

如上就是所有的步骤了,如安装不成功,要注意一下sudo 权限的问题,会在脚本里面运行不成功!!!!,若是root用户可忽略sudo操作

欢迎交流

相关资料参考如下:

Systemd 添加自定义服务(开机自启动),详解.service文件配置方式

使用Systemd把自作脚本服务化(加入开机启动)

Systemd配置开机启动

你可能感兴趣的:(centos7,linux)