欢迎各位兄弟 发布技术文章

这里的技术是共享的

You are here

macos 中的服务只要一启动起来,就每时每刻都在运行吗 通义 chatgpt 有大用 有大大用

在 macOS 中,当你使用 LaunchAgents 或 LaunchDaemons 创建了一个服务,并且设置了 RunAtLoadKeepAlive 选项后,该服务将在系统启动时自动启动,并且会持续运行,直到系统重启或服务被显式停止。

服务持续运行的配置

在你的 .plist 文件中,确保你已经包含了以下配置:

  1. Label:服务的唯一标识符。

  2. ProgramArguments:指向服务脚本或可执行文件的路径以及任何需要的参数。

  3. RunAtLoad:设置为 true 以确保服务在系统启动时运行。

  4. KeepAlive:设置为 true 以确保服务一直运行。

示例 .plist 文件如下所示:

xml
深色版本
1    <?xml version="1.0" encoding="UTF-8"?>
2    <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
3    <plist version="1.0">
4    <dict>
5        <key>Label</key>
6        <string>com.example.myservice</string>
7        <key>ProgramArguments</key>
8        <array>
9            <string>/path/to/your/script-or-binary</string>
10        <!-- 如果需要额外的参数,可以在这里添加 -->
11        </array>
12        <key>RunAtLoad</key>
13        <true/>
14            <key>KeepAlive</key>
15        <true/>
16</dict>
17</plist>

如何确保服务持续运行

  1. 放置 .plist 文件

  • 将上面的 .plist 文件保存到 ~/Library/LaunchAgents/ 目录下。

  • 加载服务

    • 在 Terminal 中加载服务:

      bash
      深色版本
      1    launchctl load ~/Library/LaunchAgents/com.example.myservice.plist
  • 启动服务

    • 启动服务:

      bash
      深色版本
      1    launchctl start com.example.myservice
  • 检查服务状态

    • 查看服务是否正在运行:

      bash
      深色版本
      1    launchctl list | grep com.example.myservice
  • 停止服务

    • 如果需要停止服务,可以使用:

      bash
      深色版本
      1    launchctl stop com.example.myservice
  • 卸载服务

    • 如果需要卸载服务,可以使用:

      bash
      深色版本
      1    launchctl unload ~/Library/LaunchAgents/com.example.myservice.plist

    通过这种方式配置的服务将在系统启动时自动启动,并且会一直保持运行状态,除非被明确地停止或系统重启。

    如果您的服务需要在特定条件下重新启动,比如在崩溃后自动重启,可以在 .plist 文件中加入 RestartInterval 设置。例如,设置为 60 秒:

    xml
    深色版本
    1        <key>RestartInterval</key>
    2        <integer>60</integer>

    这将确保服务在退出后 60 秒内重新启动。如果需要进一步的帮助,请随时告诉我。




    macos   自定义一个服务

    在 macOS 中,您可以使用 LaunchDaemons 或 LaunchAgents 来自定义服务。LaunchAgents 通常用于用户级别的服务,而 LaunchDaemons 用于系统级别的服务。下面我将向您展示如何使用 LaunchAgents 创建一个自定义服务。

    创建一个 LaunchAgent 服务

    1. 创建 plist 文件

    • 创建一个名为 com.example.myservice.plist 的文件(其中 com.example.myservice 是您的服务标识符),并将其放置在 ~/Library/LaunchAgents/ 目录下。如果您没有这个目录,可以手动创建它。

  • 编辑 plist 文件

    • 使用文本编辑器打开 com.example.myservice.plist 并添加以下内容:

      xml
      深色版本
      1    <?xml version="1.0" encoding="UTF-8"?>
      2    <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
      3    <plist version="1.0">
      4    <dict>
      5        <key>Label</key>
      6        <string>com.example.myservice</string>
      7        <key>ProgramArguments</key>
      8        <array>
      9            <string>/path/to/your/script-or-binary</string>
      10            <!-- 如果需要额外的参数,可以在这里添加 -->
      11        </array>
      12        <key>RunAtLoad</key>
      13        <true/>
      14        <key>KeepAlive</key>
      15        <true/>
      16    </dict>
      17    </plist>
    • 替换 /path/to/your/script-or-binary 为您要运行的实际脚本或二进制文件的路径。

    • 根据需要添加其他配置项,如环境变量等。

  • 加载服务

    • 打开 Terminal 并加载您新创建的服务:

      bash
      深色版本
      1    launchctl load ~/Library/LaunchAgents/com.example.myservice.plist
  • 启动服务

    • 启动服务:

      bash
      深色版本
      1    launchctl start com.example.myservice
  • 验证服务状态

    • 检查服务是否正在运行:

      bash
      深色版本
      1    launchctl list | grep com.example.myservice
  • 卸载服务

    • 卸载服务时,可以使用以下命令:

      bash
      深色版本
      1    launchctl unload ~/Library/LaunchAgents/com.example.myservice.plist
  • 删除服务

    • 删除服务文件:

      bash
      深色版本
      1    rm ~/Library/LaunchAgents/com.example.myservice.plist

    这样,您就可以在 macOS 上创建并运行自定义服务了。如果您需要更复杂的配置选项,可以在 plist 文件中添加更多的键值对。如果还有其他问题或需要进一步的帮助,请随时告诉我。



    普通分类: