服务 Linux Mac Wins

发布于 更新于

AI总结: 本文介绍了如何在Windows、Mac和Linux系统中配置和管理服务。Windows服务使用winsw.exe进行管理和配置,通过XML文件定义服务的基本信息和日志设置,并提供了安装、卸载、启动、停止、重启和查询状态的命令。Mac服务通过创建LaunchAgent配置文件并编辑.plist文件来设置服务,最后使用launchctl命令加载和验证服务。Linux服务则通过创建systemd服务文件,定义服务的描述、类型、执行命令及重启策略,并使用systemctl命令进行管理。改进建议包括增加对每个系统的具体配置示例和常见问题的解决方案,以帮助用户更好地理解和实施服务管理。

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. 日志设置
  4. Servy winsw替代

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