วิธีการปิดการใช้งาน cronjobs ของผู้ใช้เป็นการชั่วคราว?


14

ฉันจะปิดการใช้งาน cron ของผู้ใช้อย่างน้อยหนึ่งงานได้อย่างไร โดยเฉพาะอย่างยิ่งฉันไม่ต้องการที่จะระงับสิทธิ cron ของผู้ใช้ - ไม่เพียง แต่ยิงงานใด ๆ ของพวกเขา

ฉันใช้ระบบ SLES 11 SP2 และ SP3


คุณไม่เพียงแค่ใช้-u userสวิตช์ของcrontabคำสั่งและใส่#อักขระข้อคิดเห็นไว้ด้านหน้างานเพื่อปิดการใช้งานสำหรับผู้ใช้ที่กำหนด
Janis

@ Janis แล้วฉันต้องติดตามสิ่งที่ผู้ใช้ (มีจำนวนมาก) ได้แสดงความคิดเห็นแล้วรวมถึงผู้ใช้สามารถไปข้างหน้าและเพิ่มสิ่งอื่นใน (ฉันไม่ได้เพิ่มพวกเขาใน /etc/cron.deny) ทำงานด้วยตนเองมากเกินไป :(
Dinesh

Dinesh ฉันเข้าใจผิดว่าคุณต้องการการควบคุมอย่างละเอียดเกี่ยวกับสิ่งที่คุณปิดการใช้งาน
Janis

คำตอบ:


10

touch /var/spool/cron/crontabs/$username; chmod 0 /var/spool/cron/crontabs/$usernameควรทำเคล็ดลับ กู้คืนด้วยchmod 600และtouch(คุณต้องเปลี่ยน mtime ของไฟล์เพื่อให้ cron (พยายาม) โหลดซ้ำ)

อย่างน้อย Debian และอาจเป็นกับ Vixie cron โดยทั่วไปchmod 400 /var/spool/cron/crontabs/$usernameก็ใช้กลอุบายเพราะการใช้งานนั้นยืนยันว่าการอนุญาตมีค่าเท่ากับ 600 อย่างไรก็ตามสิ่งนี้จะคงอยู่จนกว่าผู้ใช้จะรันcrontabคำสั่ง

หากคุณต้องการเป็นวิธีที่มีประสิทธิภาพ, ฉันไม่คิดว่ามีอะไรที่ดีกว่าชั่วคราวย้าย crontab ของพวกเขาออกจากทางหรือเปลี่ยนสิทธิ์และ/etc/cron.denyชั่วคราวเพิ่มให้


ขอบคุณ ในระบบของฉันมันคือ / var / spool / cron / tabs / $ ชื่อผู้ใช้ chmodแต่มันก็ยังคงดำเนินการแม้หลังจากที่
Dinesh

หลังจากเปลี่ยนไฟล์ perms ฉันยังจำเป็นต้องหยุด / รีสตาร์ท cron ฉันคิดว่าอาจเป็นเพราะ cron อาจเก็บของไว้ในความทรงจำ ดังนั้นผมจึงเพิ่มหลังจากที่touch $username chmodแต่นั่นไม่ได้ช่วย (btw มาถึงจุดของคุณcron.deny)
Dinesh

@Dinesh แน่นอนคุณต้องอัปเดต mtime ของไฟล์มิฉะนั้น cron คิดว่ามันไม่เปลี่ยนและเก็บข้อมูลที่เก็บไว้ ฉันสังเกตสิ่งนี้ขณะทำการทดสอบเมื่อวาน แต่ลืมพูดถึงมันในคำตอบของฉันขอโทษเกี่ยวกับเรื่องนั้น
Gilles 'ดังนั้น - หยุดความชั่วร้าย'

หากคุณต้องการปิดการใช้งานสำหรับผู้ใช้มาตรฐานทั้งหมดเพียง:chgrp root /var/spool/cron/crontabs
shrimpwagon

9

วิธีการเกี่ยวกับสิ่งนี้เพื่อปิดการใช้งาน crontab ผู้ใช้:

crontab -l -u [username] >/tmp/[username].cron.tmp
crontab -r -u [username]

และเปิดใช้งานอีกครั้ง:

crontab -u [username] /tmp/[username].cron.tmp

สิ่งนี้มีข้อดีเพิ่มเติมที่คุณสามารถเรียกใช้ได้ในฐานะผู้ใช้นั้นโดยไม่จำเป็นต้องรูท


0

หากคุณใช้ Debian สิ่งนี้ใช้ได้กับ Debian AFAIK เท่านั้น :

คุณสามารถทำได้โดยเพิ่มจุดลงในชื่อของ cronjob

พฤติกรรมที่อ้างถึงในเอกสารอย่างเป็นทางการของเดเบียน:

https://www.debian.org/doc/debian-policy/#cron-job-file-names

ชื่อไฟล์งาน cron ต้องไม่รวมระยะเวลาหรือตัวอักษรบวก (. หรือ +) ใด ๆ เพราะจะทำให้ cron ละเว้นไฟล์ ควรใช้เครื่องหมายขีดล่าง (_) แทน และ + ตัวอักษร


0

หากคุณเพียงแค่ต้องการหยุดcronงานทั้งหมดเพียงระยะเวลาหนึ่ง - ตัวอย่างเช่นในขณะที่ทำการบำรุงรักษาระบบซึ่งพวกเขาอาจมีปฏิสัมพันธ์ไม่ดีกับ - คำสั่งเป็นปกติ

systemctl stop crond.service

และเพื่อดำเนินการต่อ

systemctl start crond.service

ฉันคิดว่าคุณต้องการสิทธิ์รูทหรือล้อเพื่อดำเนินการเหล่านั้น หากจำเป็นให้เรียกใช้พวกเขาผ่าน sudo หรือ (สุดท้าย) เข้าสู่ระบบเป็น root

overkill สำหรับคำถามเฉพาะที่วาง แต่ให้ "การช็อปปิ้งแบบครบวงจร" และไม่จำเป็นต้องเล่นกับระบบไฟล์หรือไฟล์ชั่วคราว


3
เนื่องจากสิ่งนี้ปิดใช้งาน cron สำหรับผู้ใช้ทั้งหมดจึงไม่ได้ตอบคำถามจริงๆ
สกอตต์

-1

ฉันเห็นด้วยเส้นทางผ่าน systemctl คือสิ่งที่ต้องทำ บนราสเบอร์รี่จะมีนิ้วเท้าชี้

sudo systemctl stop cron.service
sudo systemctl start cron.service

1
นี่จะเป็นการหยุดcronบริการทั้งหมด OP ต้องการให้สามารถเลือก crontabs ของผู้ใช้ที่จะปิดใช้งาน
roaima

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