我以自己的需求为例配置开机自启动:需要启动3个nodered程序
我的目录结果如下:
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/ &
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中。。。)
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}'`
进入目录/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文件
sudo systemctl daemon-reload
sudo systemctl enable nodered
sudo systemctl start nodered.service
(其中重启服务命令为:sudo systemctl restart nodered.service)
sudo systemctl status nodered.service
reboot now
ps -ef|grep node-red
如上就是所有的步骤了,如安装不成功,要注意一下sudo 权限的问题,会在脚本里面运行不成功!!!!,若是root用户可忽略sudo操作
欢迎交流
Systemd 添加自定义服务(开机自启动),详解.service文件配置方式
使用Systemd把自作脚本服务化(加入开机启动)
Systemd配置开机启动