Làm thế nào để vô hiệu hóa mọi thứ trong crontab -l?


70

Tôi chỉ muốn tạm dừng mọi thứ. Đừng thực hiện bất cứ điều gì được liệt kê trên crontab -l.

Câu trả lời:


63

crontab -esau đó nhận xét từng dòng bạn không muốn chạy cùng #.


134

Đầu tiên, sao lưu crontab:

crontab -l > my_cron_backup.txt

Sau đó, bạn có thể làm trống nó:

crontab -r

Để khôi phục lại:

crontab my_cron_backup.txt
crontab -l

2
Điều này đặc biệt hữu ích khi /tmpđang bị hỏng (và nếu -e crontab của bạn sử dụng mktemptrong /tmp.
Kevin Lee

1
+1 Cuối cùng, đây là những gì làm việc cho tôi. Cảm ơn bạn
Pavan

@alex Đây phải là câu trả lời được chấp nhận
Luis Ferrao

crontab -rlà những gì tôi đang tìm kiếm. Cảm ơn !
forzagreen

65

Bạn có quyền truy cập root? Chỉ cần tạm dừng cron

sudo /etc/init.d/crond stop

Sau đó khởi động lại nó khi bạn đã sẵn sàng

sudo /etc/init.d/crond start

5
Đó là giả sử bạn muốn dừng crontab cho tất cả người dùng bao gồm cả root. Câu trả lời được chọn và câu trả lời của kubanskamac sẽ làm điều đó chỉ cho người dùng hiện tại (mong muốn?).
Kevin K

dịch vụ crond của chúng tôi đã bị dừng lại. Điều này chỉ cho chúng tôi đi đúng hướng để kiểm tra xem crond có chạy hay không và khởi động lại.
Paul

4
Nếu bạn đang sử dụng Ubuntu, bạn có thể sử dụngsudo service cron stop
Joel

1
Trên Debian đây là /etc/init.d/cron stop.
Faheem Mitha

2
@Faheem trên Debian ngày nay cũng vậy service cron stop.
Stephen Kitt

10

Nếu bạn đang sử dụng vi làm trình soạn thảo, thì chỉ cần nhập :%s/^/#/trong chế độ lệnh. Trong tất cả các dòng (%), nó thay thế (s ///) đầu dòng (^) bằng hàm băm (#).


Nếu bạn không sử dụng vi làm trình chỉnh sửa mặc định, bạn có thể "ép buộc" sử dụng vi like EDITOR=vi; crontab -evà hơn bạn có thể sử dụng thủ thuật trên.
Betlista

2
Để không chú ý, lệnh là:%s/^#//
NP01

3

Không hài lòng với các tùy chọn ở trên vì chúng không phải là một lớp lót.

Để vô hiệu hóa crontab -l | perl -nle 's/^([^#])/# $1/;print' | crontab

Để kích hoạt crontab -l | perl -nle 's/^#\s*([0-9*])/$1/;print' | crontab

ví dụ sử dụng (được chỉnh sửa để hiển thị nó không vô hiệu hóa bình luận)

$ crontab -l
# Comment
0 0 * * 0 /opt/something.sh

$ crontab -l|perl -nle 's/^([^#])/# $1/;print'|crontab
$ crontab -l
# Comment
# 0 0 * * 0 /opt/something.sh

$ crontab -l|perl -nle 's/^#\s*([0-9*])/$1/;print'|crontab
$ crontab -l
# Comment
0 0 * * 0 /opt/something.sh

Đã thử nghiệm điều này trên RHEL và AIX, và sẽ hoạt động tốt mà không cần cài đặt bất cứ thứ gì


1
Cũng có thể tìm chi tiết cụ thể trong cronab crontab -l | perl -nle 's / ^ # \ s * ([0-1 *]) / $ 1 /; in nếu /.+mytexttofind.+/'
Jason

Bạn có thể vui lòng giải thích tại sao ý kiến ​​không bị ảnh hưởng? Mẫu bạn sử dụng để phát hiện chúng là gì?
Sopalajo de Arrierez

Hừm, dưới Debian Jessie tôi gặp lỗi sau : crontab: usage error: file name must be specified for replace. Có vẻ như bạn phải chỉ định một tệp (?) Khi sử dụng crontabmà không có bất kỳ tham số nào ( replacetheo mặc định).
fritzmg

2

Trong thử nghiệm giới hạn của tôi, đặt shell thành / bin / false hoạt động. Bạn vẫn sẽ thấy /opt/job.shviệc thực thi trong nhật ký của mình, nhưng nó sẽ là một noop:

SHELL=/bin/false

*/1 * * * *    root  /some/job.sh

1

Trong bất kỳ hương vị nào của Unix / Linux mà tôi biết:

mv /var/spool/cron  /var/spool/cron_is_disabled

Điều này:

  • vô hiệu hóa crontabs của tất cả người dùng
  • nhưng không phải hệ thống / etc / crontab (/etc/cron.d Daily. v.v.)
  • vẫn tồn tại trên một khởi động lại
  • là một lót, duh :)

1

Tôi có ý tưởng từ câu trả lời được cung cấp bởi @segaps

Để vô hiệu hóa:

crontab -l | awk '{print "# "$1}' | crontab

Để bật:

crontab -l | cut -c 3- | crontab

Vấn đề duy nhất với giải pháp được cung cấp bởi segaps, là nó sẽ bỏ qua các công việc, đã được người dùng nhận xét.


0

Để làm điều này, sử dụng nano làm trình chỉnh sửa:

sudo env EDITOR=nano crontab -e

sau đó nhận xét từng dòng bạn không muốn chạy với #

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.