ฉันจะดู / หยุดการเรียกใช้งาน crontab ปัจจุบันได้อย่างไร


20
  1. ฉันจะดูงาน crontab ที่กำลังดำเนินการอยู่ได้อย่างไร?
  2. ฉันจะหยุดงาน crontab ที่กำลังดำเนินการด้วยตนเองได้อย่างไร

คำถามนี้เกี่ยวกับดูกระบวนการ cron ที่กำลังทำงานอยู่หรือไม่?

ใช่

เพื่อฆ่ากระบวนการด้วยตนเองวิธีหนึ่งคือการใช้ pkill

ฉันคิดเกี่ยวกับ pkill / killall แต่คำสั่งบางคำของฉันในไฟล์ crontab นั้นเป็นไปตามลำดับ! หมายความว่าหลังจากเสร็จสิ้นคำสั่งคำสั่งถัดไปจะเริ่มขึ้น! ตัวอย่างเช่น:

sudo crontab -e
00 10 * * * /usr/bin/wget LINK ; shutdown -h now

ดังนั้นถ้าฉันฆ่าwgetคอมพิวเตอร์จะถูกปิด !!! -> ฉันต้องการฆ่าภารกิจ cron ให้เต็มที่ไม่ใช่ส่วนหนึ่งของมัน!

pkillปัญหาต่อไป: แล้วสคริปต์ล่ะ (ฉันได้นำเข้าสคริปต์ทุบตีไปcrontab -e) ->sudo pkill ???


คำถามของคุณเกี่ยวกับดูกระบวนการ cron ที่กำลังทำงานอยู่หรือไม่? หรือรายการของ cron-jobs โปรดแก้ไขคำถามของคุณเพื่อให้ชัดเจนยิ่งขึ้นเกี่ยวกับเรื่องนี้ หากต้องการหยุดทำงาน cron-job ไป ( askubuntu.com/q/272419/66980 )
Mohammad Etemaddar

แก้ไข; 1. ใช่ดูกระบวนการ cron ที่กำลังทำงานอยู่หรือไม่ (ฉันต้องการให้กระบวนการทำงานเบื้องหน้า); 2. ฉันต้องการหยุดมันด้วยตัวเองเหรอ! (ไม่ใช่จากกำหนดการ crontab)
มินิ

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

คำตอบ:


42

ประการแรกใช้เพียงหนึ่งคำสั่งต่อบรรทัดใน crontab เปลี่ยนบรรทัด crontab นี้:

00 10 * * * /usr/bin/wget LINK ; shutdown -h now

ดังนั้นดูเหมือนว่า:

00 10 * * * /path/to/my/crontab/script1.sh

และสร้าง/path/to/my/crontab/script1.shด้วยเนื้อหานี้:

#!/bin/bash
/usr/bin/wget LINK
shutdown -h now

แน่นอนอย่าลืมให้สิทธิ์การดำเนินการ:

chmod +x /path/to/my/crontab/script1.sh

ประการที่สองคุณสามารถเห็นการเรียกใช้งาน crontab ในรูปแบบที่มีประโยชน์และอ่านได้ในผลลัพธ์ของ:

ps -o pid,sess,cmd afx | egrep -A20 "( |/)cron( -f)?$"

พวกเขาจะปรากฏในบรรทัดแรกสิ่งนี้:

1108  1108 cron
4288  1108 \_ CRON
4289  4289     \_ /bin/sh -c /path/to/my/crontab/script1.sh
4290  4289         \_ /bin/bash /path/to/my/crontab/script1.sh
4295  4289             \_ /usr/bin/wget LINK

คอลัมน์แรกคือ PID ที่สองคือ Session ID และที่สามคือคำสั่งที่เริ่มโดย cron คุณสามารถฆ่ากระบวนการทั้งหมดที่เกี่ยวข้องกับงาน cron เฉพาะโดยใช้ Session ID ดังนั้นในตัวอย่างข้างต้นคุณควรจะฆ่า Session ID 4289:

pkill -s 4289

1
ฉันจะได้รับนี้เมื่อเรียกใช้คำสั่ง "เรียกใช้งาน crontab" นี้:sh ps: cmd: keyword not found ps: illegal argument: afx
AlecRust

cron ไม่ได้ให้วิธี "มีประโยชน์" สำหรับแสดงกระบวนการของเขา?
Cirelli94

@alecrust: ลองนี้ps -o pid,sess,cmd -afx | egrep "( |/)cron( -f)?$"
Bulrush

0

pkillฆ่ากระบวนการด้วยตนเองวิธีหนึ่งคือการใช้งาน pkill จะหยุดกระบวนการทั้งหมดที่มีรูปแบบต่อไปนี้ในชื่อ ตัวอย่างเช่นการหยุดกระบวนการ wget ทั้งหมดใช้:

sudo pkill wget

ฉันคิดเกี่ยวกับ pkill / killall แต่คำสั่งบางคำของฉันในไฟล์ crontab นั้นเป็นไปตามลำดับ! หมายความว่าหลังจากเสร็จสิ้นคำสั่งคำสั่งถัดไปจะเริ่มขึ้น! ตัวอย่างเช่น: sudo crontab -e=> 00 10 * * * /usr/bin/wget LINK ; shutdown -h now=> ดังนั้นถ้าฉันฆ่าwgetคอมพิวเตอร์จะถูกปิด !!! -> ฉันต้องการฆ่าภารกิจ cron ให้เต็มที่ไม่ใช่ส่วนหนึ่งของมัน! ปัญหา pkill ถัดไป: แล้วสคริปต์ล่ะ (ฉันได้นำเข้าสคริปต์ทุบตีไปcrontab -e) ->sudo pkill ???
มินิ

0

เปลี่ยน cronjob ของคุณเช่นนี้

00 10 * * * /usr/bin/wget LINK && shutdown -h now

สิ่งนี้ควรใช้งานได้เนื่องจาก&&หมายความว่าคำสั่งที่สองจะถูกเรียกใช้งานเมื่อคำสั่งแรกเสร็จสิ้นอย่างถูกต้อง (ส่งคืนสถานะ 0 ไปยังคอนโซล / ระบบ) ซึ่งไม่ควรเป็นกรณี (เนื่องจากกระบวนการถูกฆ่าโดยผู้ใช้และ ควรคืนค่าอื่นตามด้วย 0)

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