场景:

很多时候软件需要开机自动启动,在不登录账号的时候启动

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

所需文件:下载