Mac 开机启动 ja-netfilter 完成破解

有的,而且在 macOS 上这是"标准正确姿势" 👍

你现在这种需求:

每次开机自动执行

复制代码
sh /Users/wangjun/Plugin/ja-netfilter-all-main/scripts/install.sh

👉 最佳方案:用 launchd(mac 官方启动机制)

不推荐 crontab、不推荐登录项、不推荐 shell hack。

下面我给你 一步到位、可复制的方案


✅ 推荐方案:launchd 开机自动执行(最稳)

一、先确认脚本可执行(重要)

复制代码
chmod +x /Users/wangjun/Plugin/ja-netfilter-all-main/scripts/install.sh

如果脚本里有 #!/bin/bash#!/bin/sh,后面就不用写 sh 了。


二、创建 LaunchAgent(用户级,最常用)

复制代码
mkdir -p ~/Library/LaunchAgents

新建 plist 文件:

复制代码
nano ~/Library/LaunchAgents/com.wangjun.ja-netfilter.plist

粘贴下面内容 👇

复制代码
<?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>com.wangjun.ja-netfilter</string>

    <key>ProgramArguments</key>
    <array>
      <string>/bin/sh</string>
      <string>/Users/wangjun/Plugin/ja-netfilter-all-main/scripts/install.sh</string>
    </array>

    <!-- 登录即执行 -->
    <key>RunAtLoad</key>
    <true/>

    <!-- 失败自动重试(可选) -->
    <key>KeepAlive</key>
    <false/>

    <!-- 日志(强烈建议保留) -->
    <key>StandardOutPath</key>
    <string>/tmp/ja-netfilter.out.log</string>
    <key>StandardErrorPath</key>
    <string>/tmp/ja-netfilter.err.log</string>
  </dict>
</plist>

保存:Ctrl + O → 回车 → Ctrl + X


三、加载并立即生效

复制代码
launchctl load ~/Library/LaunchAgents/com.wangjun.ja-netfilter.plist

立即测试是否执行:

复制代码
cat /tmp/ja-netfilter.out.log
cat /tmp/ja-netfilter.err.log

四、验证是否真的生效

复制代码
launchctl list | grep ja-netfilter

🔁 常用维护命令(记住这几个)

停止

复制代码
launchctl unload ~/Library/LaunchAgents/com.wangjun.ja-netfilter.plist

重新加载(改脚本后)

复制代码
launchctl unload ~/Library/LaunchAgents/com.wangjun.ja-netfilter.plist
launchctl load ~/Library/LaunchAgents/com.wangjun.ja-netfilter.plist

⚠️ 常见坑(你很可能会踩)

❌ 1. 脚本里用到了环境变量

launchd 没有 bash/zsh 环境变量

如果脚本里有 JAVA_HOME / PATH,要么:

  • 在脚本里写死

  • 或在 plist 里加:

    <key>EnvironmentVariables</key>
    <dict>
    <key>JAVA_HOME</key>
    <string>/Library/Java/JavaVirtualMachines/xxx.jdk/Contents/Home</string>
    </dict>


❌ 2. 脚本需要 sudo?

👉 LaunchAgent 没法 sudo

如果你的 install.sh 里有 root 操作,你要用 LaunchDaemon(系统级),我可以给你那套写法。


🧠 给你一句专业建议

macOS 上:

  • 登录即跑 → LaunchAgent

  • 开机就跑(root)→ LaunchDaemon

  • ❌ 不要 crontab

  • ❌ 不要 登录项.app

你现在这个需求,LaunchAgent 是最干净、最不容易炸的方案


如果你愿意,把 install.sh 内容贴一小段出来

我可以帮你判断:

  • 是否需要 root

  • 是否需要延迟执行(等网络 / Java)

  • 是否应该 KeepAlive=true

这一步你已经走在正确工程路线上了。

相关推荐
秉承初心3 个月前
Linux中Expect脚本和Shell的脚本核心特点解析、以及比对分析和应用场景
linux·运维·服务器·sh·exp
zhoupenghui1681 年前
linux环境自动化golang项目启动脚本解析
运维·自动化·github·sh·golang自动化部署
旋转的油纸伞1 年前
Spherical Harmonics (SH)球谐函数的原理及应用【3DGS】
算法·3d·职场和发展·散列表·sh·球谐函数
-兮1 年前
完美解决Ubuntu的MySQL临时文件夹修改调整
linux·mysql·ubuntu·adb·debian·sh
西风凋丶碧树2 年前
sh脚本笔记2
linux·sh
杨小扬2 年前
xcode命令行
macos·ios·xcode·sh
半虹2 年前
Linux实战笔记(五) shell
linux·bash·shell·环境变量·配置文件·sh
白嫖一茶2 年前
shell 正则表达式RE 正则符号拓展源 以及脚本中的正则匹配 递归查找文件内容 sed过滤文件内容
sh
白嫖一茶2 年前
shell 获取主机IP 脚本中使用IP 打印出来IP
服务器·bash·sh