Chạy lệnh khi khởi động trên crontab


24

Tôi muốn chạy một lệnh trên linux của chúng tôi sau khi khởi động lại xong, tôi thấy rằng nó có thể được thực hiện bằng crontab. Tôi muốn chạy lệnh này

sudo ifdown eth0 && sudo ifup -v eth0

trên crontab tôi chỉ có thể làm:

@reboot sudo ifdown eth0 && sudo ifup -v eth0

hoặc tôi cần lưu trữ nó trong một kịch bản?

cảm ơn bạn


7
Crontab có vẻ như là một công cụ sai lầm để khởi động lại eth0. Tại sao không đặt lệnh đó (không có sudo) trong /etc/rc.local?
mikewhthing 17/2/2016

Bạn cần làm gì để làm điều này? Các tác vụ này thường được thực hiện tự động trong quá trình khởi động và hầu như KHÔNG BAO GIỜ cần được chạy riêng với quy trình khởi động tự động ...
Thomas Ward

1
@mikewhthing tôi không thể upvote tại thời điểm này nhưng chỉ muốn cảm ơn bạn đã gợi ý điều đó.
Lottie

Câu trả lời:


34

Một vài lưu ý ở đây trước khi điều này hoạt động:

  1. Đừng sử dụng sudotrong một công việc định kỳ. Thay vào đó hãy chỉnh sửa rootcrontab thay vì của riêng bạn, ví dụ sudo crontab -evà sau đó nhập lệnh mà không có sudo.
  2. Như @mikewhthing đã đề cập, đây là một cách sử dụng kỳ quặc cronvà có thể sẽ được đặt tốt hơn /etc/rc.localtrước exit 0dòng.
  3. Nếu bạn cho chúng tôi biết chính xác những gì bạn đang tìm kiếm, chúng tôi có thể hướng bạn đến một tùy chọn đăng nhập hoặc cấu hình (khởi động lại dịch vụ mạng của bạn khi khởi động cảm thấy hơi khó chịu).
  4. Trên hầu hết các hệ thống @rebootcũng nên chạy sau khi tắt máy hoặc gặp sự cố, nhưng có các triển khai cron khác nhau nên YMMV. Tôi đã thấy những bình luận ở những nơi khác nhau khẳng định cả hai.

EDIT (2016/02/17): Đã xóa blurb không chính xác trên các đường dẫn tuyệt đối; kudos @muru
EDIT (2016/10/17): Đã thêm ghi chú tắt máy
EDIT (2017/09/11): Ghi chú tắt máy được sửa đổi. Không thực sự chắc chắn về điều đó.


ok chỉ muốn làm rõ, tôi chỉ nên viết lệnh đầy đủ etc/rc.localmà không cần sudo. vì vậy, nó sẽ chỉ là ifdown eth0 && sudo ifup -v eth0 exit 0
Lottie

cronsử dụng PATHcho trong /etc/environment, trong đó có /sbin.
muru

Tôi đã làm những gì @mikewhthing đề nghị và nó hoạt động. cảm ơn bạn
Lottie

1
@TheSchwa nên. Ít nhất kể từ 12.04, /etc/pam.d/crontải pam_env, do đó /etc/environmentnên được đọc và PATHthiết lập mặc định được sử dụng. Câu trả lời đó đã được đăng ngay trước khi 12.04 xuất hiện.
muru

2
@TheSchwa Tuyên bố rằng khởi động lại của cron không chạy trên khởi động nguội là sai. Các dòng với khởi động lại chạy khi daemon crond bắt đầu, thời gian. Đó là cho dù đó là một đôi giày ấm, giày lạnh hay không có boot và tôi chỉ cần tắt thủ công và khởi động lại. Trình nền crond không biết hoặc quan tâm tại sao nó được khởi động lại, nó sẽ chỉ chạy các dòng khởi động lại bất cứ khi nào nó làm.
Kurt Fitzner

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.