เกิดอะไรขึ้นกับการกำหนดค่า Launchctl ของฉัน


15

ฉันพยายามเรียกใช้ SickBeard อัตโนมัติเมื่อเข้าสู่ระบบ

python /Applications/Sick-Beard/Sickbeard.py

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC -//Apple Computer//DTD PLIST 1.0//EN http://www.apple.com/DTDs/PropertyList-1.0.dtd >
<plist version="1.0">
<dict>
  <key>Label</key>
  <string>com.sickbeard.sickbeard</string>
  <key>ProgramArguments</key>
  <array>
       <string>/usr/bin/python</string>
       <string>/Applications/Sick-Beard/SickBeard.py</string>
       <string>-q</string>
       <string>-d</string>
  </array>
  <key>RunAtLoad</key>
  <true/>
</dict>
</plist>

เมื่อฉันเรียกใช้launchctl com.sickbeard.sickbeard.plistมันให้ฉันข้อความ:

launchctl load com.sickbeard.sickbeard.plist launchctl: ไม่มี plist ถูกส่งคืนสำหรับ: com.sickbeard.sickbeard.plist launchctl: ไม่มี plist ที่ถูกส่งคืนสำหรับ: com.sickbeard.sickbeard.plist ไม่พบสิ่งใดที่จะโหลด


ฉันถือว่าคุณหมายถึง "launchctl load com.sickbeard.sickbeard.plist" ในบรรทัดคำสั่งของคุณ? มิฉะนั้นคุณจะได้รับข้อผิดพลาดที่แตกต่างอย่างสิ้นเชิง ;-)
binarybob

คำตอบ:


37

ฉันสมมติว่าเส้นทางไปยังสคริปต์ python และพารามิเตอร์นั้นถูกต้องมิฉะนั้นคุณอาจจะเห็นข้อผิดพลาดในคอนโซลแทน

ครั้งสุดท้ายที่ฉันเห็นข้อผิดพลาดนั้นเพราะมีตัวละครปลอมใน Plist เช่นช่องว่างเพิ่มเติมทำให้เกิดข้อผิดพลาดทางไวยากรณ์และทำให้ไม่สามารถโหลดได้ หากคุณเรียกใช้plutil -lintPlist สิ่งนี้จะตรวจสอบไวยากรณ์สำหรับคุณและรายงานกลับไปยังบรรทัดที่มีข้อผิดพลาดเกิดขึ้น

plutil -lint com.sickbeard.sickbeard.plist

หากไม่ได้ช่วยที่(OSX) วิธีการเริ่มต้นที่ SickBeard สู่ระบบหรือบูตใน OSXกระทู้ในฟอรั่ sickbeard มี plist แตกต่างกันเล็กน้อยกับคุณ (sickbeard วิ่งออกมาจาก/usr/localเมื่อเทียบกับ/Applications- ดังนั้นจึงอาจจะเป็นสิ่งสิทธิ์) และ บางคนที่มีปัญหาเหมือนกันกับคุณ


2
ขอขอบคุณสำหรับความช่วยเหลือของคุณ. ดูเหมือนว่าการคัดลอกและวางจะนำตัวละครพิเศษที่ซ่อนอยู่ ฉันพิมพ์ XML ทั้งหมดอีกครั้งด้วย nano และทำงานได้ดี
Joao Costa

2
ขอบคุณไม่เคยรู้plutil -lintมาก่อน มีประโยชน์มาก!
robmathers

เพิ่งพบการโพสต์นี้ แต่การตรวจสอบเอาท์พุทคอนโซลช่วยได้มากกับการดีบักเช่นกัน
Wing Tang Wong

2

ขณะที่ฉันค้นพบวิธีที่ยากคุณต้องดำเนินการคำสั่งโดยใช้sudoเช่นเดียวกับการผ่านเส้นทางแบบเต็มของ.plistไฟล์ดังต่อไปนี้ (ในกรณีของคุณ):

sudo launchctl load /Library/LaunchDaemons/com.sickbeard.sickbeard.plist

เส้นทางอาจแตกต่างกันไปสำหรับคุณ แต่คุณต้องค้นหาไฟล์เพื่อหาที่ตั้งและส่งมันตามที่ฉันอ้างถึงlaunchctlคำสั่ง


2

ข้อความnothing found to loadหมายความว่าบางครั้งการกำหนดค่าจะถูกแทนที่ด้วยการกำหนดค่าอื่น ๆ คุณบังคับให้โหลดโดยใช้ตัวเลือก "-w" launchctl load or unloadเมื่อใช้

หากคุณต้องบังคับให้โหลดหรือยกเลิกการโหลดไฟล์ plist หมายความว่าคุณมีการกำหนดค่าที่แทนที่ plist การแทนที่นี้จะถูกสร้างขึ้นเมื่อคุณใช้ "-w" มิฉะนั้นจะไม่มีการแทนที่จะถูกเพิ่มลงในไฟล์แทนที่ เพื่อป้องกันกรณีนี้แก้ไขไฟล์ด้านล่างค้นหาป้ายกำกับงานที่คุณต้องการลบการแทนที่ลบบรรทัดที่จำเป็น:

pico /var/db/launchd.db/com.apple.launchd/overrides.plist

ตัวอย่างเช่นลบบรรทัดนี้

<key>com.mydomain.myjob</key>
<dict>
        <key>Disabled</key>
        <true/>
</dict>

จากนั้นคุณสามารถใช้: launchctl load or unload /Library/LaunchDaemons/com.mydomain.myjob.plistโดยไม่ต้องใช้ "-w" หรือ "-F" คุณไม่ควรมีข้อความnothing found to load


1

คุณอาจต้องการเพิ่มแฟล็ก -F เพื่อบังคับlaunchctlให้โหลด. plist นอกจากนี้ตรวจสอบให้แน่ใจว่า .plist อยู่ในการlaunchctlค้นหาเส้นทาง หาก .plist ของคุณอยู่ที่อื่นคุณสามารถเพิ่มแฟล็ก -D และระบุโดเมนได้ จาก manpage:

โดเมน -D
ค้นหาไฟล์ plist (5) ที่ลงท้ายด้วย * .plist ในโดเมนที่กำหนด โดเมนที่ถูกต้องรวมถึง "ระบบ" "ท้องถิ่น" "เครือข่าย" และ "ทั้งหมด" เมื่อระบุประเภทเซสชันโดเมนเพิ่มเติมจะพร้อมใช้งานสำหรับการใช้งานที่เรียกว่า "ผู้ใช้" ตัวอย่างเช่นหากไม่มีประเภทเซสชันที่กำหนด "-D system" จะโหลดจากไฟล์รายการคุณสมบัติจาก / System / Library / LaunchDaemons เมื่อผ่านประเภทเซสชันแล้วมันจะโหลดจาก / System / Library / LaunchAgents

ตรวจสอบให้แน่ใจว่าคุณได้ตรวจสอบข้อมูลทั้งหมดที่มีอยู่ใน manpage อย่างถี่ถ้วน - คุณสามารถทำลายสิ่งต่างๆได้อย่างแท้จริงหากการโทรของคุณไม่ได้รับการกำหนดค่าอย่างเหมาะสม

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