ดูเหมือนว่า launchd จะไม่สนใจ StartCalendarInterval บน Yosemite


9

ฉันพยายามอัปเดต Homebrew ตามเวลาด้วย launchd ไฟล์ 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>ms.liu.homebrew.update</string>
  <key>UserName</key>
  <string>LiuMS</string>
  <key>ProcessType</key>
  <string>Background</string>
  <key>EnvironmentVariables</key>
  <key>ProgramArguments</key>
  <array>
    <string>/usr/local/bin/brew</string>
    <string>update</string>
  </array>
  <key>StartCalendarInterval</key>
  <dict>
    <key>Hour</key>
    <integer>20</integer>
    <key>Minute</key>
    <integer>0</integer>
  </dict>
  <key>StandardOutPath</key>
  <string>/usr/local/logs/ms.liu.homebrew.update.out</string>
  <key>StandardErrorPath</key>
  <string>/usr/local/logs/ms.liu.homebrew.update.err</string>
</dict>
</plist>

มันทำงานอย่างใด: ฉันสามารถดำเนินการlaunchctl start ms.liu.homebrew.updateด้วยตนเองเพื่ออัปเดต Homebrew ของฉัน อย่างไรก็ตาม launchd ไม่ได้เรียกใช้บริการนี้เป็นระยะ: การเปลี่ยนแปลงล่าสุดของไฟล์ซึ่ง stdout เปลี่ยนเส้นทางไปเป็นสองวันที่ผ่านมา

ฉันพยายามรับข้อมูลเกี่ยวกับบริการนี้ แต่ไม่ได้รับอะไรเลย:

> launchctl print user/%MyPID%/ms.liu.homebrew.update`` 
Could not find service "ms.liu.homebrew.update" in domain for uid: %MyPID%

ดูเหมือนว่าฉันไม่ได้โหลดบริการของฉันสำเร็จ อย่างไร? ฉันใช้launchctl loadแต่ดูเหมือนว่ามันเลิกใช้แล้ว หน้า Man แนะนำ bootstrap แทน:

> launchctl bootstrap user/%MyPID% %Path-to-plist%
> %Path-to-plist%: Service cannot load in requested session

ฉันควรทำอย่างไรดี? วิธีการใช้อย่างถูกต้องlaunchctl bootstrapและlaunchctl print?

ฉันใช้ OS X Yosemite GM ผู้สมัคร 1 บน MacBookPro พร้อมจอแสดงผล Retina (2013)

คำตอบ:


2

ฉันเพิ่งจะเริ่มทำสิ่งนี้ออกมาดังนั้นคำตอบนี้ไม่แน่นอน - แต่ฉันหวังว่ามันจะมีประโยชน์มากกว่าที่ไม่มีคำตอบเลย (ฉันจะทิ้งมันไว้เป็นความคิดเห็นหากฉันมีตัวแทนเพียงพอ)

แผนนี้อยู่ใน~/Library/LaunchAgentsสารบบของคุณหรือไม่? ดูเหมือนว่าสิ่งเหล่านี้จะถูกบูตในguiโดเมนของคุณไม่ใช่userโดเมนของคุณ ดังนั้นคุณสามารถทำได้:

launchctl print gui/%UID%/ms.liu.homebrew.update

และมันควรจะทำงาน (ทำมัน?)

เหตุผลที่คุณไม่สามารถ bootstrap ลงในuserโดเมนได้ก็คือมันได้ทำการ bootstrapped เข้าไปในguiโดเมนแล้ว

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.