Cron? launchd? iCal ??
ถ้าเป็นเช่นนั้นได้อย่างไร
Cron? launchd? iCal ??
ถ้าเป็นเช่นนั้นได้อย่างไร
คำตอบ:
สำหรับการอ้างอิงทั้ง 3 ตัวเลือกจะใช้งานได้ ตัวเลือก iCal มีข้อ จำกัด มากกว่าตัวเลือกอื่น
(มี GUIs สำหรับการแก้ไข cron และ launchd ตามที่กล่าวไว้ในคำตอบอื่น ๆ )
Cron ตรงไปตรงมามากที่สุดและเป็นที่รู้จักกันดีและมีบทเรียนมากมาย หมายเหตุ Coles คือการเพิ่มบรรทัดสุดท้ายจากด้านล่างไปยัง crontab ของคุณ (โดยการแก้ไข/etc/crontab
หรือใช้crontab
ในบรรทัดคำสั่ง):
MM HH DD MM WKD -- Minutes, Hour, Day, Month, Weekday (eg. Sun, Mon)
MM HH * * * USERNAME /PATH/TO/SCRIPT
00 3 * * * chealion /myscript.sh "Runs at 03:00 every day"
ใน Mac OS X cron
นั้นถูกแทนที่ด้วยlaunchd
แต่launchd
เข้ากันได้กับcron
ความหมายที่คุณยังคงสามารถใช้งานได้cron
แต่จริงๆแล้วมันใช้งานได้จริงlaunchd
ทั้งหมด
หากคุณต้องการใช้launchd
คุณจะต้องตรวจสอบคำถามอื่น ๆ ที่นี่ใน Super User เช่นกัน: (เช่นฉันจะรันคำสั่ง launchd เป็น root ได้อย่างไร ) ตามที่คุณต้องการบันทึกไฟล์กำหนดค่าของคุณ (ไฟล์ plist) เมื่อมันรันขึ้นอยู่กับว่ามันถูกเก็บไว้ในไดเรกทอรีใดและมันถูกโหลดอย่างไร (เช่นคุณใช้ sudo หรือไม่) - คล้ายกับ cron
ตัวอย่าง runist launchd plist รายวัน (ต้องแน่ใจว่าไฟล์และและ label เหมือนกัน - ลบ plist สำหรับ label) ดังนี้ - สคริปต์นี้รันทุกวันเวลา 3 นาทีที่ผ่านมาเที่ยงคืน:
<?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>local.IDENTIFIER_HERE.SOMETHING</string>
<key>KeepAlive</key>
<false/>
<key>RunAtLoad</key>
<false/>
<key>UserName</key>
<string>USERNAME HERE</string>
<key>Program</key>
<string>/PATH/TO/SCRIPT</string>
<key>ProgramArguments</key>
<array>
<string>Argument_1</string>
<string>Argument_2</string>
</array>
<key>StartCalendarInterval</key>
<dict>
<key>Hour</key>
<integer>00</integer>
<key>Minute</key>
<integer>03</integer>
</dict>
</dict>
</plist>
นอกจากนี้ยังเป็นที่น่าสังเกตว่างาน launchd นั้นถ้าพวกเขาถูกกำหนดเวลาไว้เมื่อคอมพิวเตอร์หลับหรือปิดพวกเขาจะทำงานเมื่อคอมพิวเตอร์พร้อมใช้งานอีกครั้ง (เปิดหรือตื่นขึ้นมา) - เพียงครั้งเดียวไม่ว่าจะมีกี่วันก็ตาม เป็น, อยู่, คือ. แก้ไข: ฉันเพิ่งไปที่เอกสาร Apple ที่กล่าวว่าหากเครื่องปิดอยู่คุณจะสูญเสียกิจกรรมการเปิดตัวในช่วงเวลานั้น (สคริปต์ของคุณจะไม่เปิดเมื่อเริ่มต้น) (สลีปจะเปิดสคริปต์เมื่อตื่นขึ้น)
ตัวเลือกอื่นคือใช้ " at " (ตรวจสอบหน้าคู่มือด้วย "man at") สคริปต์สามารถจัดกำหนดการใหม่ด้วยตนเองเช่น:
echo "sh $0 $@" | at `date +%H:%M` tomorrow
(ใช้ "+ 10 นาที" แทน "พรุ่งนี้" เพื่อรันทุก ๆ 10 นาทีหากต้องการหยุดการกำหนดเวลาเพียงทำ "at -l" เพื่อแสดงรายการรหัสงานที่กำหนดเวลาไว้และจากนั้น "at -r id " เพื่อลบงาน)
คุณอาจต้องเริ่ม daemon ที่เกี่ยวข้อง (atrun) ก่อนด้วย (ดูhttps://superuser.com/a/43680 ):
sudo launchctl load -w /System/Library/LaunchDaemons/com.apple.atrun.plist
ข้อดี: การแก้ไขอย่างรวดเร็วไม่จำเป็นต้องใช้การเข้าถึง sudo / รูทรูปแบบกำหนดการที่ซับซ้อนและง่ายข้อเสีย: ไม่ใช่วิธีการตั้งเวลามาตรฐานสำหรับ OS X (ซึ่งเป็น launchd)
launchd
เป็นวิธีที่จะไปภายใต้ OS X.
crontab -e
มันจะทำให้คุณเป็นเท็กซ์เทอร์มินัลเท็กซ์ในไฟล์ที่จะกลายเป็น crontab ส่วนบุคคลของคุณเมื่อคุณบันทึก
LaunchControlเป็นอีก GUI สำหรับ launchd / launchctl ในขณะที่ตัวเลือกอื่น ๆ ที่คนอื่นพูดถึงสามารถเปิดใช้งานสคริปต์ได้อย่างสมบูรณ์แบบในแต่ละวันด้วย LaunchControl คุณสามารถกำหนดค่าตารางเวลาที่ซับซ้อนได้ (เช่น "วันละครั้งทุกวันธรรมดาในวันหยุดสุดสัปดาห์ นอกจากนี้ยังเป็น (AFAIK) เครื่องมือเดียวที่ตรวจสอบงานจริง หากงานไม่ทำงานอย่างที่คาดไว้มันจะแสดงสาเหตุ
ลองฟรีตราบเท่าที่คุณต้องการ
มันขึ้นอยู่กับสิ่งที่คุณต้องการ: สคริปต์ iCal จะถูกดำเนินการเฉพาะเมื่อคุณลงชื่อเข้าcron
ใช้เรียกใช้งานสคริปต์โดยไม่ต้องเข้าสู่ระบบฉันไม่ทราบว่า iCal จะเรียกใช้งานสคริปต์หรือไม่หาก Mac ถูกเปิดในเวลาที่สคริปต์ควรมี ถูกประหารชีวิต cron
กำลังทำสิ่งนี้
การอัปเดต: คุณสามารถตรวจสอบบางแอพได้ใน Mac OS X App Store เพื่อทำสิ่งนี้:
Lingon ก็มีให้ใช้เช่นกันขึ้นอยู่กับระบบปฏิบัติการที่คุณใช้
นี่คือยูทิลิตี้ที่ง่ายและฟรีในการสร้าง plist XML:
http://www.gieson.com/Library/projects/utilities/launcha/
ด้วยโปรแกรมนี้ไม่จำเป็นต้องติดตั้งโปรแกรมเพียงบันทึกผลลัพธ์ลงในโฟลเดอร์ Library / LaunchAgents ของคุณ
RunAtStart
ได้ตั้งค่าเป็นเท็จ (เว้นแต่คุณต้องการให้เป็นจริง) ฉันใช้เวลาหนึ่งชั่วโมงเพื่อหาสาเหตุที่เครื่องมือค้นหาของฉันหยุดและหยุดการโหลดเดสก์ท็อปเมื่อบูต การปิดใช้งานRunAtStart
ไม่รบกวนกำหนดการที่กำหนดไว้
ฉันมักจะใช้Lingonสำหรับสิ่งนี้ แต่ดูเหมือนว่ามันจะเป็นการพัฒนาที่ไม่ดี คุณสามารถลองCrontooieได้ แต่ฉันไม่เคยใช้มันเป็นการส่วนตัว หรือเพียงแค่แก้ไขไฟล์ crontab ในเทอร์มินัล
หากคุณต้องการทดลองใช้ฟรีฉันขอแนะนำTask Till Dawn
sp@mactop ~ $ crontab -l
*/5 * * * * /usr/local/bin/cinco.sh
sp@mactop ~ $ cat /usr/local/bin/cinco.sh
#!/bin/sh
....cut....
sp@mactop ~ $
... บรรทัดคำสั่งใดก็ตามที่คุณส่งเข้ามาเพื่อ ".... cut .... " จะเริ่มทำงานทุกห้านาที
30 ปีของความคืบหน้าและ 'cron' ยังคงเป็นตัวกำหนดตารางเวลาที่ฉันชอบ
-C
หากกิจกรรมในปฏิทินตรงตามความต้องการของคุณแอปพลิเคชั่น Automator ในตัวจะให้คุณสร้างการเตือนภัยปฏิทินที่เกิดขึ้นจากเหตุการณ์ในปฏิทิน คุณอาจใช้การดำเนินการที่อิงกับ UI บางอย่างเพื่อทำสิ่งที่คุณต้องการหรือคุณสามารถเรียกใช้แอปพลิเคชันหรือ AppleScript, JavaScript หรือเชลล์สคริปต์ที่กำหนดเองได้