สคริปต์ Cron ไม่ได้ดำเนินการกับ Mavericks


12

ฉันได้กำหนดค่าไฟล์ crontab ของผู้ใช้ดังนี้:

*/2 * * * * /Users/[my user]/Dropbox/htdocs/auto-update.sh

แต่มันจะไม่ทำงาน ฉันรอประมาณ 10-15 นาที ทำไม?

คำสั่ง auto-update.sh ทำงานได้อย่างง่ายดายหากดำเนินการเอง ฉันจะแยกส่วนของการดำเนินการและเรียกใช้สคริปต์จาก cron ได้อย่างไร


1
คุณใช้ระบบปฏิบัติการอะไร Cron เลิกใช้แล้วใน OS X ดังนั้นคุณอาจต้องเริ่ม daemon?
bmike

ล่าสุด 10.9.2 ฉันต้องทำอย่างไร? ตัวอย่างเช่นฉันต้องการให้สคริปต์ทำงานทุกชั่วโมง ในสคริปต์ข้างต้นฉันหมดหวังเพราะมันไม่ทำงานและแก้ไขเพื่อให้ทำงานทุก 2 นาที
RomaValcer

1
cron daemon ควรเริ่มต้นโดยอัตโนมัติ (โดยการแทนที่ launchd) หากมีไฟล์ crontab อยู่ ดู /System/Library/LaunchDaemons/com.vix.cron.plist (โดยเฉพาะKeepAliveและQueueDirectoriesรายการ)
Gordon Davisson

ตกลง Keeplive อยู่ที่นั่น แต่มีเพียงเส้นทางที่ระบุว่ามี '/ etc / crontab' ที่ไม่มีอยู่ ใน QueueDirectories มีไฟล์อยู่ในโฟลเดอร์ที่ จำกัด '/ usr / lib / cron / tabs' เมื่อเปิดมันด้วย su และ vim นั่นเป็นหน้าที่ของฉัน
RomaValcer

คำตอบ:


17

สภาพแวดล้อมที่งาน cron ทำงานอยู่นั้นค่อนข้างแตกต่างจากเชลล์เชิงโต้ตอบ เป็นไปได้ว่าสคริปต์กำลังทำงานอยู่ แต่ไม่สำเร็จ หนึ่งในความแตกต่างที่ใหญ่ที่สุดคือสำหรับงาน cron, PATH เริ่มต้นเป็นเพียง "/ usr / bin: / bin" ดังนั้นหากคุณใช้คำสั่งใด ๆ ที่ไม่ได้อยู่ใน / usr / bin หรือ / bin พวกเขาจะไม่ พบเว้นแต่สคริปต์ของคุณจะตั้งค่าเส้นทางของตัวเองหรือระบุเส้นทางที่ชัดเจนไปยังคำสั่ง ความแตกต่างที่สำคัญอื่น ๆ ก็คือมันไม่ได้เชื่อมต่อกับเซสชันแบบโต้ตอบดังนั้นหากพยายามทำสิ่งใดแบบโต้ตอบ (อ่านจากเทอร์มินัล ฯลฯ ) ที่จะล้มเหลว ลองเปลี่ยนรายการ cron เป็น:

*/2 * * * * /Users/[my user]/Dropbox/htdocs/auto-update.sh >>/tmp/auto-update.log 2>&1

... และดูว่ามีข้อมูลใดแสดงขึ้นในบันทึก


นี้ดีกว่าความพยายามของฉัน - อย่าลังเลที่จะรวมความคิดคนตัดไม้ของฉันถ้ามันทำให้คำตอบของคุณดีขึ้น
bmike

บันทึกไม่ปรากฏขึ้น
RomaValcer

@RomaValcer: มันแปลกดี - มันหมายความว่ามันไม่ได้ไปไกลแม้แต่การเปิดตัวสคริปต์ ฉันจะเรียกใช้ps -ax | grep [c]ronและดูว่ามันแสดง cron daemon (/ usr / sbin / cron) ที่ทำงานอยู่หรือไม่ ถ้าเป็นเช่นนั้นลองทดสอบตัวบันทึกของ bmike ในกรณีใด ๆ ให้ตรวจสอบบันทึก (/var/log/system.log และรายการ "ข้อความทั้งหมด" ในยูทิลิตี้คอนโซล) และดูว่ามีอะไรที่เกี่ยวข้องหรือไม่
Gordon Davisson

ใช่มันอยู่ที่นั่น แต่บันทึกจะไม่แสดงสิ่งใด ๆ ที่เริ่มต้นตามกำหนดเวลา
RomaValcer

4

มันยากที่จะบอก แต่ถ้าคุณเพิ่มงาน cron ที่สองเพื่อดำเนินการทุก ๆ 5 นาทีและเรียกมันว่าเครื่องมือสร้างระบบที่บันทึกข้อความไว้ที่ system.log?

0,5,10,15,20 * * * * /usr/bin/logger "cron is working"

ด้วยวิธีนี้คุณจะรู้ว่า cron กำลังทำงานสำหรับผู้ใช้ที่เป็นปัญหาและสามารถมุ่งเน้นที่การเริ่ม cron หรือแก้ไขสคริปต์ของคุณเพื่อให้ทำงานในสภาพแวดล้อม cron ที่ จำกัด (คุณสามารถดูนาฬิกาแขวนและเลือกสองสามครั้งที่กำลังจะมาถึงในไม่ช้าหรือแม้แต่อีกสองสามนาที - เช่นการแก้ไขที่ 12:34 ใส่ 35,36,37,38 นาทีเพื่อเรียกใช้และบันทึกไฟล์ cron .)


4

คุณได้ถามคำถามนี้มาระยะหนึ่งแล้ว แต่ดูเหมือนว่าจะไม่มีวิธีแก้ไขในชุดข้อความนี้

ขึ้นอยู่กับวิธีที่คุณสร้างผู้ใช้ crontab คุณอาจจำเป็นต้องดำเนินการนี้หลังจากแก้ไข:

crontab ~/.yourcrontabfile

หากต้องการดูว่า crontab ใหม่ (หลังจากการปรับเปลี่ยน) เปิดใช้งานแล้วให้ตรวจสอบด้วย:

crontab -l

ไม่ได้ผล Crontab -l แสดงให้เห็นว่ามีการตั้งค่า crons แล้ว แต่ก็ยังใช้งานไม่ได้
PKHunter

1

ผมมีปัญหาเหมือนกัน. คุณต้องเพิ่มเส้นทางไปยังสคริปต์ทุบตีของคุณ:

#!/bin/sh
PATH=/usr/local/bin:/usr/local/sbin:~/bin:/usr/bin:/bin:/usr/sbin:/sbin

0

ผมมีปัญหาเหมือนกัน. มันหายไปหลังจากฉันเพิ่มบรรทัดใหม่หลังจากงานของฉันในไฟล์ crontab ของฉัน (ฉันเป็น crontab ทั้งหมด n00b ดังนั้นฉันจึงไม่รู้ว่าพฤติกรรมนี้เป็นที่รู้จักกันอย่างกว้างขวางหรือไม่)

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