ฉันจะรับสคริปต์ให้ทำงานทุกวันใน Mac OS X ได้อย่างไร


คำตอบ:


62

สำหรับการอ้างอิงทั้ง 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)


8
คุณครับสำหรับไฟล์กำหนดค่า launchd ตัวอย่างของคุณฉันสามารถจูบคุณได้ แต่ฉันไม่ได้
Paul D. Waite

5
launchdเป็นวิธีที่จะไปภายใต้ OS X.
zneak

ใช่นั่นคือความประทับใจของฉัน ดูเหมือนว่ามันจะมีปัญหาบางอย่างในไทเกอร์ แต่ Apple ดูเหมือนจะทำให้มันคมชัดขึ้นตั้งแต่นั้นมา
Paul D. Waite

บน Os 10.7.4 ไม่มีไฟล์ / etc / crontab ): ดังนั้นฉันจึง 'ซึ่ง crontab' และที่ให้ฉัน / usr / bin / crontab แต่นั่นเป็นไฟล์ที่อ่านไม่ออก
Hermann Ingjaldsson

@ HermannIngjaldsson / usr / bin / crontab เป็นโปรแกรม ถ้าคุณเรียกใช้ใน Terminal ด้วยcrontab -eมันจะทำให้คุณเป็นเท็กซ์เทอร์มินัลเท็กซ์ในไฟล์ที่จะกลายเป็น crontab ส่วนบุคคลของคุณเมื่อคุณบันทึก
Mark Reed

8

LaunchControlเป็นอีก GUI สำหรับ launchd / launchctl ในขณะที่ตัวเลือกอื่น ๆ ที่คนอื่นพูดถึงสามารถเปิดใช้งานสคริปต์ได้อย่างสมบูรณ์แบบในแต่ละวันด้วย LaunchControl คุณสามารถกำหนดค่าตารางเวลาที่ซับซ้อนได้ (เช่น "วันละครั้งทุกวันธรรมดาในวันหยุดสุดสัปดาห์ นอกจากนี้ยังเป็น (AFAIK) เครื่องมือเดียวที่ตรวจสอบงานจริง หากงานไม่ทำงานอย่างที่คาดไว้มันจะแสดงสาเหตุ

ลองฟรีตราบเท่าที่คุณต้องการ


3
แม้ว่าจะสามารถทดลองใช้หรือใช้งานได้ฟรี แต่ผู้พัฒนาต้องการให้คุณชำระค่าลิขสิทธิ์ sites.fastspring.com/somazone/product/shop
Kent

1
อย่างแน่นอน เหตุผลที่ฉันโพสต์คำตอบนี้ตั้งแต่แรกก็เพื่อสนับสนุนนักพัฒนา
Mark Hall

5

CronniXเป็นส่วนหน้า GUI ที่ดีสำหรับการจัดตารางเวลางาน cron ใน mac ... ค่อนข้างดีถ้าคุณไม่ต้องการไปและเจาะลึกลงไปในเอกสาร cron


2
  • สำหรับ iCal คุณอาจต้องการที่จะอ่านบทความ
  • คุณควรจะพบบทเรียนที่เพียงพอcronถ้าคุณ google สำหรับมัน

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


2

การอัปเดต: คุณสามารถตรวจสอบบางแอพได้ใน Mac OS X App Store เพื่อทำสิ่งนี้:

Lingon ก็มีให้ใช้เช่นกันขึ้นอยู่กับระบบปฏิบัติการที่คุณใช้


2

นี่คือยูทิลิตี้ที่ง่ายและฟรีในการสร้าง plist XML:

http://www.gieson.com/Library/projects/utilities/launcha/

ด้วยโปรแกรมนี้ไม่จำเป็นต้องติดตั้งโปรแกรมเพียงบันทึกผลลัพธ์ลงในโฟลเดอร์ Library / LaunchAgents ของคุณ


คำเตือน:หากคุณใช้เครื่องมือนี้ตรวจสอบให้แน่ใจว่าRunAtStartได้ตั้งค่าเป็นเท็จ (เว้นแต่คุณต้องการให้เป็นจริง) ฉันใช้เวลาหนึ่งชั่วโมงเพื่อหาสาเหตุที่เครื่องมือค้นหาของฉันหยุดและหยุดการโหลดเดสก์ท็อปเมื่อบูต การปิดใช้งานRunAtStartไม่รบกวนกำหนดการที่กำหนดไว้
Andrea Lazzarotto

1

ฉันมักจะใช้Lingonสำหรับสิ่งนี้ แต่ดูเหมือนว่ามันจะเป็นการพัฒนาที่ไม่ดี คุณสามารถลองCrontooieได้ แต่ฉันไม่เคยใช้มันเป็นการส่วนตัว หรือเพียงแค่แก้ไขไฟล์ crontab ในเทอร์มินัล


ดูเหมือนว่าฉัน Lingon จะอยู่ภายใต้การพัฒนาที่ใช้งานอยู่ ; เวอร์ชันปัจจุบัน 3 มีอยู่ใน AppStore พร้อมกับเวอร์ชันก่อนหน้า 2 ทั้งคู่มีค่าใช้จ่ายไม่กี่ดอลลาร์และได้รับความเห็นที่หลากหลาย ฉันเองใช้ Lingon 3 กับความสำเร็จบางอย่างแต่จะไม่แนะนำสำหรับจุดประสงค์ในบทความนี้กับเครื่องมืออื่น ๆ ที่กล่าวถึงในคำตอบอื่น ๆ (cron, at, ฯลฯ )
ssc

ครั้งล่าสุดที่ฉันใช้ Lingon เมื่อ 2 ปีที่แล้ว ตอนนั้นมันใช้ได้ดีสำหรับฉัน แต่ฉันไม่ได้ใช้ข้อล่าสุด น่าเสียดายที่มันไม่น่าเชื่อถือเท่าที่เคยเป็นมา
Josh


0
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


0

หากกิจกรรมในปฏิทินตรงตามความต้องการของคุณแอปพลิเคชั่น Automator ในตัวจะให้คุณสร้างการเตือนภัยปฏิทินที่เกิดขึ้นจากเหตุการณ์ในปฏิทิน คุณอาจใช้การดำเนินการที่อิงกับ UI บางอย่างเพื่อทำสิ่งที่คุณต้องการหรือคุณสามารถเรียกใช้แอปพลิเคชันหรือ AppleScript, JavaScript หรือเชลล์สคริปต์ที่กำหนดเองได้

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