ปิดใช้งาน cron เฉพาะเจาะจงอย่างแข็งแกร่งสคริปต์รายชั่วโมงรายวันรายสัปดาห์


25

ในระบบต่าง ๆ ที่ฉันจัดการมีสคริปต์ cron ที่เรียกใช้ผ่าน/etc/cron.{hourly,daily,weekly}เค้าโครงที่ใช้บ่อย สิ่งที่ฉันต้องการทราบก็คือฟังก์ชั่น 'ปิดใช้งานสคริปต์นี้' มีทั่วไปหรือไม่

เห็นได้ชัดว่าเพียงลบบางสิ่งออกจากไดเรกทอรีที่กำหนดจะปิดการใช้งาน แต่ฉันกำลังมองหาวิธีการแก้ปัญหาที่ถาวรมากขึ้น การลบ/etc/cron.daily/slocateจะทำงานเพื่อปิดการใช้งานทุกคืนupdatedbในเครื่องที่บ้านของฉัน (ที่ฉันไม่เคยใช้slocate) แต่ครั้งต่อไปที่ฉันอัพเกรดแพคเกจ slocate ฉันค่อนข้างมั่นใจว่ามันจะปรากฏขึ้นอีกครั้ง

การแจกแจงสองอย่างที่ฉันสนใจมากที่สุดคือ Gentoo และ OpenSUSE แต่ฉันหวังว่าจะมีกลไกที่นำไปใช้อย่างกว้างขวาง distros ทั้งสองที่ฉันมีพวกเขาใช้ vixie-cron (ไม่แน่ใจว่ามันสำคัญ)

คำตอบ:


45

คุณควรจะสามารถchmod -x scriptnameปิดการใช้งานสคริปต์ แต่ปล่อยให้ไฟล์เข้าที่


5
ที่อาจหรืออาจไม่ได้รับการยกเลิกโดยระบบการจัดการแพคเกจ คุณอาจจะทำเรื่องนี้ให้มีประสิทธิภาพมากขึ้นโดยการทำหลังจากที่chattr +i scriptname chmod
mc0e

@ ขอบคุณ mc0e การเรียนการสอนฉันเกี่ยวกับไฟล์ที่ไม่เปลี่ยนรูป แต่เป็นคนเคยกล่าวไว้ว่าพวกเขากำลังที่น่ากลัว ถ้าฉันลืมสิ่งที่ฉันทำมันอาจนำไปสู่ปัญหาที่น่าผิดหวังอย่างมาก
Jonathan Y.

2
@ โจนาธาน: นั่นคือสิ่งที่lsattrมีไว้สำหรับ - เพื่อลบความน่ากลัว (มันแสดงรายการของไฟล์)
หยุดชั่วคราวจนกว่าจะมีการแจ้งให้ทราบต่อไป

1
DW แน่นอน แต่การรู้ที่จะดูคุณลักษณะของไฟล์เมื่อมีสิ่งผิดปกติอย่างลึกลับ (เช่นเดียวกับในหัวข้อที่ฉันเชื่อมโยงไป) เป็นเตะจริงที่นี่
Jonathan Y.

@JonathanY ตอนนี้คุณรู้แล้ว :-) ไม่ว่าในกรณีใดฉันคิดว่าบิต 'ที่น่ากลัว' ในเธรดที่เชื่อมโยงนั้นอ้างถึงข้อผิดพลาดของ Pacman ไม่ใช่การ
แชต

9

ส่วนทำงานไม่ได้ทำงานที่มีจุดในชื่อของพวกเขาดังนั้น

mv /etc/cron.d/job /etc/cron.d/job.disabled

จะทำเคล็ดลับ


1
น่าเสียดายที่จะมีปัญหาแบบเดียวกันเมื่ออัปเกรดโปรแกรม - มันจะตรวจสอบเพื่อดูว่ามีงาน cron อยู่หรือไม่และเนื่องจากไม่มีชื่อเดิมมันจึงถูกสร้างขึ้นใหม่
เจนนี่ D พูดว่า Reinstate Monica

2
กลับมาอีกครั้งเมื่ออัพเกรดโปรแกรมเป็นผลข้างเคียงของเครื่องมือแพ็กเกจที่ใช้งานไม่สามารถแก้ไขได้ด้วยวิธีง่าย ๆ และไม่ใช่ความผิดของ Cron ระบบแพ็กเกจบางระบบจะทำไฟล์ nuke และปูไฟล์ก่อนหน้านี้ส่วนไฟล์อื่น ๆ จะเป็นไฟล์เก่าและใหม่และจะแจ้งให้คุณทราบหากมีการเปลี่ยนแปลงเพื่อตรวจสอบ โดยไม่คำนึงถึงการอัพเดตที่สร้างพฤติกรรมที่ไม่ได้ตั้งใจควรเป็นสิ่งที่น่าหงุดหงิด แต่ส่วนหนึ่งของการบริหารระบบยูนิกซ์ตามปกติในตอนนี้ มีแพ็คเกจจำนวนมากที่เคลื่อนไหวอย่างรวดเร็วเกินไปเพื่อตรวจสอบการเปลี่ยนแปลงทั้งหมดที่มีผลกระทบต่อสภาพแวดล้อมแต่ละอย่างเป็นประจำ
ปอกเปลือก

ใน Debian มีความคิดเกี่ยวกับการเบี่ยงเบนของไฟล์นั่นคือคุณสามารถเปลี่ยนชื่อไฟล์ได้อย่างมีประสิทธิภาพในขณะที่ตัวจัดการแพคเกจยังคงจัดการอยู่ อาจมีกลไกคล้ายกันใน Gentoo และ / หรือ SUSE หรือไม่?
Bass

9

มักจะcron.dailyถูกเรียกผ่าน/etc/crontabทางสายเช่น

run-parts --report /etc/cron.daily

man run-parts ให้ตัวเลือกแก่คุณ

run-parts --test /etc/cron.daily แสดงให้เห็นว่างานใดที่ถูกสั่งให้ทำงาน

ฉันชอบทำ Subir ให้เป็น 'Disabled' และย้ายงานของฉันไปที่นั่น

ไม่ว่าในกรณีใด ๆ หากคุณอัปเดตแพคเกจอาจเป็นไปได้ที่งานจะกลับมาทำงานอีกครั้งหรือบิต 'x' ที่ถูกลบนั้นได้รับการกู้คืน


1

คุณสามารถลบแพ็กเกจ slocate หากคุณไม่เคยใช้


นั่นเป็นเพียงตัวอย่าง แต่ยังคงคำแนะนำที่ดีขอบคุณ (ผมคิดว่าบางสิ่งบางอย่างอาจขึ้นอยู่กับ slocate แต่ไม่มีอะไรที่ดูเหมือนจะ.)
benizi

ลบ slocate และติดตั้ง mlocate แทน ดีกว่ามาก
mc0e

1

หากคุณใช้ cfengine ( https://cfengine.com/ ) คุณสามารถทำได้โดยปิดการใช้งาน คุณเพียงแค่เขียนไฟล์สัญญาสำหรับกลุ่มโฮสต์และมันจะใช้ตัวเองในการเรียกใช้ cfagent ครั้งต่อไป การทำเช่นนี้กับหุ่นเชิดหรือพ่อครัวหรืออะไรก็ตามที่ควรจะค่อนข้างง่าย


น่าสนใจ ฉันเพิ่งพบเครื่องมือการจัดการการกำหนดค่าที่สัมผัสได้มาก ฉันกำลังมองหาวิธีแก้ปัญหา "ฉันมีระบบ Unix-like โดยพลการ"
benizi

1

/etc/cron.daily และ อัล สคริปต์ถูกเรียกใช้โดยสคริปต์ที่เรียกว่าส่วนรัน สคริปต์นั้นแตกต่างกันไป ตัวอย่างเช่น --test switch ดังกล่าวข้างต้นไม่ได้อยู่ในเครื่องที่ฉันใช้อยู่ในทันที

Run-parts เป็นสคริปต์ทุบตี มันเป็นเครื่องมือที่มีประโยชน์โดยทั่วไปสำหรับการเรียกใช้สคริปต์ทั้งหมดในไดเรกทอรีที่ได้รับเป็นอาร์กิวเมนต์ มักจะพบที่ / usr / bin / run-parts

มันมีเหตุผลมากมายสำหรับการตัดสินใจว่าจะทำงานอย่างไร รหัสนั้นถือเป็นคำตอบสำหรับคำถามของคุณ แต่ก็แตกต่างกันไป ดังนั้นคุณต้องอ่านรหัสเพื่อความปลอดภัย

ในรุ่นที่ฉันกำลังดูมันมีตรรกะที่เมื่อทำงานกับไดเรกทอรี <foo> ตรวจสอบ <foo> /jobs.deny หากมีอยู่จะปฏิเสธที่จะเรียกใช้สคริปต์ใด ๆ ที่กล่าวถึงในไฟล์นั้นบนบรรทัดเพียงอย่างเดียว สมมติว่าคุณมีฟังก์ชั่นนี้มันยอดเยี่ยมเพราะมันจะทำงานต่อไปเมื่อแพ็คเกจที่ติดตั้งติดตั้งหรืออัพเกรด


0

หากจัดการกับ RHEL และ derivates (ซึ่งจัดทำcrontabsแพ็คเกจ) คุณสามารถปิดการใช้งานได้อย่างชัดเจนโดยใส่ชื่อลงในjobs.denyไฟล์

จากcrontabs / ทำงานส่วนหน้าคน :

การดำเนินการของไฟล์สามารถอนุญาตหรือปฏิเสธได้โดยการสร้างไฟล์ jobs.allow หรือ jobs.deny ซึ่งทำงานคล้ายกับไฟล์ allow / deny config อื่น ๆ ไฟล์จะต้องสร้างขึ้นในไดเรกทอรีที่ระบุ

ตัวอย่าง /etc/cron.daily/jobs.deny อาจมีตัวอย่างเช่น 0logwatch ซึ่งห้ามการเรียกใช้สคริปต์นี้


-1

หากคุณไม่ต้องการให้ผู้ใช้ crontabs ใช้งานให้ปิดการใช้งาน crond ในรายการบริการของคุณ

ใน Debian และเวอร์ชั่นที่ใช้ Debian นี่เป็นเพียงเรื่องของการลบ symlink ออกจาก /etc/rcX.d ที่เหมาะสม (สำหรับ runlevel X)

ฉันไม่รู้ว่าคุณจัดการบริการใน SUSE หรือ Gentoo อย่างไร


4
นั่นเป็นเพียงความคิดที่ไม่ดี การปิดใช้งาน cron ทั้งหมดจะปิดใช้งานงานบำรุงรักษาที่มีประโยชน์เช่น logrotate, updatedb, การอัพเกรดที่ไม่ต้องใส่ข้อมูลและการแบ็คอัพมาตรฐาน
Tobu

อัปเดตเป็นงานที่ฉันพยายามปิดการใช้งาน (อัปเดตฐานข้อมูลสำหรับ slocate) อย่างไรก็ตามใช่คำแนะนำที่ไม่ดีโดยทั่วไป
benizi

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