欢迎各位兄弟 发布技术文章
这里的技术是共享的
jamf 为什么 推送 策略失败,,,,能在哪里看出有没有推送
在 Jamf Pro 里,策略(Policy)是否推送成功,可以从以下几个地方确认:
登录 Jamf Pro 控制台
进入 Computers → Policies → [你的策略]
点击 Logs 标签页,可以看到:
哪些设备已经执行(Completed)
哪些设备失败(Failed)
哪些设备还没执行(Pending)
在受管的 Mac 上,可以通过以下方法确认:
在 Mac 上打开终端
查看 jamf.log:
里面会记录:
策略是否下载到本机
是否执行成功 / 失败原因
在终端运行:
可以手动拉取最新的策略,并在终端里直接看到执行结果。
Jamf 的策略主要靠 check-in(心跳) 或 MDM push 去触发:
Check-in:受管 Mac 默认每 15 分钟跟 Jamf Pro 联系一次。
MDM push:即时通知,但要依赖 APNs(Apple Push Notification service)。
如果 Mac 没联网,或 APNs 被阻断,策略就可能不会立刻推送。
👉 所以你可以先在 Jamf Pro 控制台 → 策略日志 看状态,再去 Mac 本地 /var/log/jamf.log
验证有没有收到推送。
要不要我给你写一段 脚本,可以在 Mac 上快速检测策略有没有被推送和执行?
给我写一段 脚本,可以在 Mac 上快速检测策略有没有被推送和执行?
我给你写一个 一键检测脚本,能在 Mac 上快速检查 Jamf 策略:
查看本机 Jamf 版本
列出 Scope 到本机的策略(jamf policy -verbose
)
从 /var/log/jamf.log
提取 已执行过的策略
输出差集 → 哪些策略被推送了但是还没执行
保存为 jamf_policy_check.sh
给执行权限:
运行:
⚡ 脚本会输出:
Jamf 版本
Scope 到的策略
已执行的策略
未执行的策略(重点关注)
要不要我帮你加一个 实时监听模式(自动 tail -f /var/log/jamf.log
,一旦有新策略执行就提示你)?
AA SPCTL disable Login, Startup, Check-in, Network State Change, Enrollment
AA-Wifi-MST-Only Network State Change
AAES_JAMF-M Login, Startup, Check-in, Network State Change
uninstall NPI blacklist software Login, Startup, Check-in
Update Inventory Check-in
安装 某某某 开机仅运行一次推送 Login, Startup, Check-in, Network State Change, Enrollment
在 /var/log/jamf.log 文件里,看到 后面三个策略 没有执行到
你贴的这些策略对应的 触发条件 (Triggers) 已经很清楚了:
Login → 用户登录时触发
Startup → 设备开机时触发
Check-in → 默认 15 分钟一次心跳触发
Network State Change → 网络状态变化(例如 Wi-Fi 切换、有线插拔)时触发
Enrollment → 设备注册时触发
你在 /var/log/jamf.log
里看到 后面三个策略没执行,通常有几个排查方向:
在 Jamf Pro 控制台 → 策略 → Scope 里确认
如果设备不在目标范围内(Smart Group / Static Group),即使触发了也不会执行。
举例:
Login
→ 需要用户实际登录一次才会执行。
Startup
→ 必须是冷启动才触发,重启/休眠唤醒不算。
Check-in
→ 要等设备心跳报到,如果设备长时间离线就不会触发。
Network State Change
→ 必须有网络切换,静态不变不会触发。
👉 可以手动执行:
如果策略设置了 Custom Trigger,就要用上面命令跑。
在 Jamf Pro Web 控制台 → 策略 → Logs
看看是否显示为 Pending 或 Not Triggered。
Scope 不对(设备不在策略范围里)。
Execution Frequency 只允许一次,而设备之前已经跑过。
Network State Change 没有发生(例如一直在同一个 Wi-Fi 下)。
Enrollment 触发 只在首次注册时执行,后面不会再跑。
要精确定位的话,你可以在目标 Mac 上跑:
它会列出设备当前能拿到的所有策略和执行情况。
要不要我帮你写一个 检查脚本,自动从 /var/log/jamf.log
和 jamf policy -verbose
输出里筛选出哪些策略被 Scope 到但还没执行?
# sudo jamf policy -verbose
Password:
verbose:JAMF binary already symlinked
verbose: Checking for an existing instance of this application.
This policy trigger is already being run: root 17090.00.1 4110 6840021088??S
11:55上午
0:00.08
/usr/local/jamf/bin/jamf policy-event CLIENT CHECKIN -stopConsoleLogs verbose:Policyerror code:51
你跑 sudo jamf policy -verbose
的输出里有几个关键信息:
这说明:
表示系统里已经有一个 jamf policy
进程在跑了(可能是自动 Check-in 触发的,或者你前面已经手动跑过一次还没结束)。
所以新的 jamf policy
命令被拒绝执行。
👉 可以用命令查一下有没有残留进程:
如果看到卡住的 jamf policy
,可以先杀掉:
然后再跑一次:
error code: 51
在 Jamf 里通常意味着 Policy execution failed / invalid trigger。
可能原因:
策略设置了 Custom Trigger,而你只是用默认的 check-in
去触发,结果没有匹配。
策略的 Scope 或条件不满足(比如 Execution Frequency 设置成 “Once per computer”,已经跑过一次了)。
依赖的文件/脚本丢失或权限不对,Jamf 执行时报错。
先清掉 jamf 卡死进程,重新跑:
如果还是报 error code: 51
,建议直接指定触发器试试:
(触发器名可以在 Jamf Pro 控制台里,策略详情页 → General → Custom Event Trigger 找到。)
同时检查本机日志:
看具体是哪条策略报错。
要不要我帮你写一个小脚本,自动检测 哪些 jamf policy 进程卡住 + 哪条策略报错 + 对应 error code 含义,这样你不用手动一条条查?
sudo jamf policy 与 sudo jamf policy -verbose 区别
sudo jamf policy
和 sudo jamf policy -verbose
是用于触发 Jamf Pro 策略执行的命令,两者的核心区别在于 输出信息的详细程度。以下是具体分析:
sudo jamf policy
(基础命令)功能:
检查并执行符合条件的策略(根据策略的触发条件、作用范围等)。
输出信息:
仅显示 关键信息(如策略是否被触发、执行结果是否成功)。
适用于日常快速检查或脚本中无需详细日志的场景。
示例输出:
plaintextChecking for policies triggered by "event"... Executing Policy 1: Install Firefox Policy execution completed.
sudo jamf policy -verbose
(详细模式)功能:
同样执行策略,但会输出 详细的调试信息。
输出信息:
策略未触发的具体原因(如作用范围不匹配、频率限制等)。
脚本或包安装失败的详细错误日志。
显示策略执行的 全流程(如策略的检查过程、条件评估、脚本输出、文件下载进度等)。
适用于 故障排查,例如:
示例输出:
plaintextChecking for policies triggered by "event"... Evaluating policy ID 123 (Install Firefox)... - Checking scope: Device is in scope (Group: "All Devices"). - Checking frequency: Policy can run (not within 10-minute window). - Downloading package "Firefox.pkg" (100% complete). - Running script "Post-install Check" (exit code 0). Policy execution successful.
场景 | 推荐命令 |
---|---|
快速检查策略是否执行 | sudo jamf policy |
排查策略未触发的原因 | sudo jamf policy -verbose |
调试脚本或安装包失败 | -verbose 模式 |
自动化脚本(仅需结果) | 基础命令 |
-event <事件名称>
:通过特定事件触发策略(如 sudo jamf policy -event update
)。
-id <策略ID>
:直接指定策略ID执行(跳过条件检查)。
通过结合 -verbose
和这些参数,可以更精准地控制策略执行并获取调试信息。
我帮你写一个 检查脚本,自动从 /var/log/jamf.log 和 jamf policy -verbose 输出里筛选出哪些策略被 Scope 到但还没执行?
那我给你做一个 检查 Jamf 策略执行情况的脚本,能同时:
从 jamf policy -verbose
里解析出设备当前能拉到的策略
从 /var/log/jamf.log
里比对哪些策略执行过
最后输出 Scope 到但未执行的策略列表
脚本如下(bash):
保存为 check_jamf_policies.sh
给权限:
运行:
这个脚本会输出三部分:
Scope 到的策略(从 jamf policy -verbose
拿到)
已经执行过的策略(从 /var/log/jamf.log
查)
未执行的策略(差集)
要不要我再帮你加一段逻辑:检测 策略触发条件(Login / Startup / Check-in / Network State Change),告诉你为啥还没跑?