Mac OS X 如何实现开机自启动frp脚本 2024-05-10

背景

在服务器开发领域,如果我们将自己的 Mac 电脑做为远程服务器,我们需要其开机能自启动一些脚本,以便运行一些服务。如开启 frp 服务。

实现方式

Mac 官方提供了实现方式,链接。总结起来两种方式 “daemon” 和 “agent” 。在实现前需要先了解一下 Mac 的服务启动顺序,如下(官方介绍):

Mac OS X 如何实现开机自启动frp脚本 2024-05-10

整体的服务分为如下两个 Session 阶段。

  1. Startup Session 阶段启动系统服务,这个阶段不需要用户登录。尤其是一些后台的脚本,适合放在这里执行。如想在这个阶段执行脚本,那需要将 plist 文件放在 /System/Library/LaunchDaemons/ (操作系统级别的服务程序)或 /Library/LaunchDaemons/ (本机全局级别的服务程序,提议放在本目录)。
  2. Login Session 阶段启动,这个阶段有个前提是需要用户登录。如果用户不登录是不会执行这个阶段的脚本,只有用户成功登录后才会执行这个脚本。这个阶段的比较适合放那些登录后需要打开的软件。如果想在这个阶段执行脚本,那需要将 plist 文件放在 ~/Library/LaunchAgents 这个目录下。

开机自启动 frp 脚本

由于本文将 frp 做为服务器,所以我们将 plist 文件放在 /Library/LaunchDaemons/ 这个目录下,这样无论什么时候开机或者重启,都会执行。进入 /Library/LaunchDaemons/ 这个目录,编写启动脚本如下:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>Label</key>
    <string>org.popkit</string>
    <key>ProgramArguments</key>
    <array>
        <string>/Users/aborn/init.sh</string>
    </array>
    <key>StandardOutPath</key>
    <string>/var/log/popkit.log</string>
    <key>StandardErrorPath</key>
    <string>/var/log/popkit.log</string>
    <key>Debug</key>
    <true/>
    <key>KeepAlive</key>
    <true/>
</dict>
</plist>

我的 /Library/LaunchDaemons/ 目录下文件名为 org.popkit.plist

Mac OS X 如何实现开机自启动frp脚本 2024-05-10

如果没有编辑权限,可能需要切换到 root 用户,使用如下命令:

sudo -i

具体 plist 文件如何写可参考官方文档,这里需要注意以下几点:

  • 使用脚本的全路径,如 /Users/aborn/init.sh 这是我脚本的全路径。
  • 注意给 init.sh 脚本加可执行权限。
  • 可以增加 standardOutPathStandardErrorPath 这两个日志路径,以便查看启动脚本的输出日志。

我的 frp 启动脚本 如下:

#!/bin/sh
/Users/aborn/software/frp/frpc -c /Users/aborn/software/frp/frpc.toml

© 版权声明
THE END
如果内容对您有所帮助,就支持一下吧!
点赞0 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容