在不同平台实现守护进程的方式

2025-07-18 运维 liunx, macOS, windows

在liunx系统下

创建 systemd 服务单元文件

/etc/systemd/system/ 目录下创建 sshtun.service 文件:

1
2
3
4
5
6
7
8
9
10
11
12
[Unit]
Description=SSH Tunnel Daemon
After=network.target

[Service]
Type=simple
ExecStart=/usr/local/bin/sshtun --config /root/.ssh/sshtun.yaml
Restart=always
RestartSec=5

[Install]
WantedBy=multi-user.target

请根据实际情况修改 --config 后面的配置文件路径。

Restart=always 保证服务异常退出后自动重启。

常见命令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
//重新加载 systemd 配置并启动服务
sudo systemctl daemon-reload
sudo systemctl enable sshtun.service
sudo systemctl start sshtun.service

//查看服务状态
sudo systemctl status sshtun.service
// 停止服务
sudo systemctl stop sshtun.service
//重启服务
sudo systemctl restart sshtun.service
//日志查看
sudo journalctl -u sshtun.service -f
// 卸载
sudo systemctl stop sshtun.service
sudo systemctl disable sshtun.service
sudo rm /etc/systemd/system/sshtun.service
sudo systemctl daemon-reload
sudo rm /usr/local/bin/sshtun
rm ~/.ssh/sshtun.yaml

在macOS系统下

选择运行类型

类型路径权限需求适用场景
LaunchAgent~/Library/LaunchAgents/普通用户用户登录后自动运行
LaunchDaemon/Library/LaunchDaemons/需要 root开机后就运行(系统级)

⚠️ 建议:如果你只为自己用,用 LaunchAgent 就行

请将路径 /usr/local/bin/sshtun/Users/yourname/.ssh/sshtun.yaml 替换成你的实际路径。

你需要替换的内容:

占位示例
/usr/local/bin/sshtun替换成你的 Go 可执行文件绝对路径
/Users/yourname/.ssh/sshtun.yaml替换为你的配置文件绝对路径
/Users/yourname/Library/Logs/...改为你 Mac 当前用户名的路径(或用 ~ 展开)

示例替换后(以用户为 zhiqiang 举例)

示例文件:~/Library/LaunchAgents/com.sshtun.daemon.plist

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN"
"http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<!-- 唯一标识 -->
<key>Label</key>
<string>com.sshtun.daemon</string>

<!-- 要执行的程序路径 -->
<key>ProgramArguments</key>
<array>
<string>/usr/local/bin/sshtun</string>
<string>--config</string>
<string>/Users/zhiqiang/.ssh/sshtun.yaml</string>
</array>

<!-- 是否在登录后自动运行 -->
<key>RunAtLoad</key>
<true/>

<!-- 如果程序崩溃是否重启 -->
<key>KeepAlive</key>
<true/>

<!-- 日志路径 -->
<key>StandardOutPath</key>
<string>/Users/zhiqiang/Library/Logs/sshtun.out.log</string>
<key>StandardErrorPath</key>
<string>/Users/zhiqiang/Library/Logs/sshtun.err.log</string>
</dict>
</plist>

常见命令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
// 修改权限
chmod 644 ~/Library/LaunchAgents/com.sshtun.daemon.plist

//加载服务
launchctl load ~/Library/LaunchAgents/com.sshtun.daemon.plist

//检查是否成功运行
launchctl list | grep sshtun

//移除服务
launchctl unload ~/Library/LaunchAgents/com.sshtun.daemon.plist

//重启
launchctl unload ~/Library/LaunchAgents/com.sshtun.daemon.plist
launchctl load ~/Library/LaunchAgents/com.sshtun.daemon.plist

在windows系统下

1. 创建任务(自动启动 sshtun)

  1. 打开 任务计划程序(任务栏搜索“任务计划程序”即可打开)
  2. 点击右侧的“创建任务…”
  3. 在“常规”标签页:
    • 名称填写:sshtun
    • 选择“使用最高权限运行”
    • 配置为“Windows 10”或对应系统版本
  4. 在“触发器”标签页:
    • 点击“新建”
    • 选择“登录时”或“开机时”启动
    • 确认
  5. 在“操作”标签页:
    • 点击“新建”
    • 操作选择“启动程序”
    • 程序/脚本填写 C:\path\to\sshtun.exe
    • 在“添加参数”填写 --config C:\path\to\config.yaml (根据实际路径修改)
    • 点击确定
  6. “条件”和“设置”页根据需求调整,通常默认即可。
  7. 保存任务。

2. 启动和停止

  • 任务计划程序会根据触发器自动运行,无需手动启动。
  • 需要停止时,可以直接结束程序进程,或在任务计划程序中禁用该任务。

3. 删除任务(卸载)

  • 打开任务计划程序
  • 找到你创建的 sshtun 任务
  • 右键选择“删除”即可移除自动启动配置