Win服务
可以使用winsw.exe进行全局管理, 也可以重命名为指定应用的服务程序如myapp-server.exe
服务配置
<service>
<id>myapp</id>
<name>myapp</name>
<description>myapp服务</description>
<env name="MYAPP_HOME" value="%BASE%"/> <!-- BASE: 指向包含重命名后的 WinSW.exe 的目录 -->
<executable>myapp.exe</executable>
<arguments>-f "%BASE%\myapp.yaml" -d "%BASE%"</arguments> <!-- 应用程序参数 -->
<logpath>%BASE%\logs</logpath>
<log mode="roll-by-size">
<sizeThreshold>10240</sizeThreshold>
<keepFiles>3</keepFiles>
</log>
</service>
服务管理
# 安装服务
winsw.exe install myapp-server.xml
# 卸载服务
winsw.exe uninstall myapp-server.xml
# 启动服务
winsw.exe start myapp-server.xml
# 停止服务
winsw.exe stop myapp-server.xml
# 重启服务
winsw.exe restart myapp-server.xml
# 查询服务状态
winsw.exe status myapp-server.xml
# 刷新服务属性
winsw.exe refresh myapp-server.xml
相关链接
Mac服务
1. 创建 LaunchAgent 配置文件
在终端执行以下命令,在 ~/Library/LaunchAgents 目录(如未存在则新增目录)新增配置文件:
vim ~/Library/LaunchAgents/myapp.plist
2. 编辑 .plist 文件内容
将以下内容填入文件中,并根据 实际路径 调整以下部分:
<?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>myapp.service</string> <!-- 自定义服务标识 -->
<key>ProgramArguments</key>
<array>
<string>/MYAPP_HOME/myapp</string> <!-- 应用绝对路径 -->
<string>-f</string> <!-- 以下应用程序参数, 可根据实际情况进行调整 -->
<string>/MYAPP_HOME/myapp.yaml</string>
<string>-d</string>
<string>/MYAPP_HOME</string>
</array>
<key>RunAtLoad</key>
<true/>
<key>KeepAlive</key>
<false/>
</dict>
</plist>
3. 加载并验证服务
保存文件后执行以下命令,确保服务生效:
launchctl load ~/Library/LaunchAgents/myapp.plist # 加载服务
launchctl list | grep myapp # 验证是否加载
Linux服务
/etc/systemd/system/myapp.service
[Unit]
Description=myapp service
After=network.target NetworkManager.service systemd-networkd.service iwd.service
[Service]
Type=simple
LimitNPROC=500
LimitNOFILE=1000000
CapabilityBoundingSet=CAP_NET_ADMIN CAP_NET_RAW CAP_NET_BIND_SERVICE CAP_SYS_TIME CAP_SYS_PTRACE CAP_DAC_READ_SEARCH CAP_DAC_OVERRIDE
AmbientCapabilities=CAP_NET_ADMIN CAP_NET_RAW CAP_NET_BIND_SERVICE CAP_SYS_TIME CAP_SYS_PTRACE CAP_DAC_READ_SEARCH CAP_DAC_OVERRIDE
Restart=always
ExecStartPre=/usr/bin/sleep 1s
ExecStart=/usr/local/bin/myapp -d /etc/myapp
ExecReload=/bin/kill -HUP $MAINPID
[Install]
WantedBy=multi-user.target
systemctl daemon-reload # 重新加载systemd
systemctl enable myapp # 启用服务