服务 Linux Mac Wins

发布于 更新于

AI总结: 本文介绍了在Windows、Mac和Linux系统中如何创建和管理服务。Windows服务使用winsw.exe进行全局管理,可以通过配置XML文件来定义服务的基本信息、环境变量、可执行文件和日志设置。提供了安装、卸载、启动、停止、重启和查询服务状态的命令。Mac服务则通过创建和编辑LaunchAgent配置文件(.plist)来实现,包含服务标识、程序参数及加载验证的步骤。Linux服务通过systemd配置文件定义,包含服务描述、依赖关系、资源限制和启动命令等,并提供了启用服务的命令。 存在的错误观点包括:在Mac服务部分,示例代码中“/MYAPP_HOME/myapp”应替换为实际的应用程序路径,而不是使用占位符。

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

相关链接

  1. winsw服务管理
  2. 服务配置文件说明
  3. 日志设置

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 # 启用服务