Windows Linux服务方式启动程序
场景:
很多时候软件需要开机自动启动,在不登录账号的时候启动
Windows
方法1:
1.所需软件nssm.exe
nssm.exe install 《服务名称》 "C:\Windows\System32\cmd.exe" "/c cd /d 《所要运行软件的目录》" &《软件名.exe》 --参数"
方法2:
1.所需软件WinSW-x64.exe
2.修改WinSW-x64.xml文件
1.<id> 和 <name>
定义了服务的唯一标识和显示名称,这些值应在系统中保持唯一。
2.<description>
服务的描述,将显示在服务管理器中,帮助用户理解服务的用途。
3.<executable>
指定要执行的主程序路径
确保程序位于配置文件的相同目录,或使用绝对路径。
4.<arguments>
向主程序传递的参数
5.<startmode>
定义服务的启动模式:
Automatic 表示系统启动时服务会自动启动。
3.生成服务
WinSW-x64.exe install
Openwrt
1.以vnts为例,vi /etc/init.d/vnts
▲
#!/bin/sh /etc/rc.common
# 开头定义
START=99
STOP=10
start() {
echo "Starting vnts with parameters..."
/path/to/vnts --param1 value1 --param2 value2
}
my_pkill() {
ps | grep "$1" | grep -v "grep" | awk '{print $1}' | while read -r pid; do
kill -9 "$pid"
done
}
stop() {
echo "Stopping vnts..."
my_pkill "vnt-cli"
}
▲
#!/bin/sh /etc/rc.common
START=99
start() {
echo "Starting vnts with auto-restart loop..."
# 检查是否已有后台监控脚本运行,避免重复
if pgrep -f "sh /etc/init.d/vnt start" > /dev/null; then
echo "vnt monitor already running."
return 0
fi
# 启动后台监控
nohup sh -c '
while true; do
if ! pgrep -x "/root/vnt/vnt-cli" > /dev/null; then
echo "$(date "+%Y-%m-%d %H:%M:%S") vnt not running, starting..." >> /root/vnt/vnt.log
nohup /path/to/vnts --param1 value1 --param2 value2 >> /root/vnt/vnt.log 2>&1 &
fi
sleep 60
done
' >> /root/vnt/vnt.log 2>&1 &
}
my_pkill() {
ps | grep "$1" | grep -v "grep" | awk '{print $1}' | while read -r pid; do
kill -9 "$pid"
done
}
stop() {
echo "Stopping vnt..."
my_pkill "vnt-cli"
# 杀掉监控循环
my_pkill "sh /etc/init.d/vnt start"
}
2.运行脚本并后台管理:
将脚本以服务方式启用,确保启动时进入后台运行。
/etc/init.d/vnts enable
/etc/init.d/vnts start
所需文件:下载
本作品采用 知识共享署名-相同方式共享 4.0 国际许可协议 进行许可。