Công việc Crontab bắt đầu +1 phút sau @reboot


42

Cần một kịch bản được thực hiện tại mỗi lần khởi động lại trong +1 phút. Tôi đã đặt một bản ghi @rebootnhưng quá sớm cho kịch bản của tôi. Làm thế nào để thực hiện nó sau khi khởi động lại?


2
Tại sao nó quá sớm ? Có lẽ một tập lệnh init sẽ phù hợp hơn (bằng cách liên quan đến các phụ thuộc, ví dụ tập lệnh này cần được thiết lập mạng trước )?
sr_ 7/12 '

kịch bản của tôi cần được thực thi sau tất cả những thứ khác, cuối cùng bằng những từ ngắn gọn
Yurij73

vì công việc của bạn cần được thực hiện sau tất cả mọi thứ và vì khái niệm của mọi thứ khá thay đổi (việc thêm ứng dụng autostart @ restart mới không quá phổ biến), tôi nghĩ rằng việc bạn đặt công việc của mình vào các tập lệnh RC trong một cách mà máy chủ mục đích của bạn. Đặt nhiệm vụ của bạn ở dưới cùng của các tác vụ được chỉ định trong /etc/rc.local thường là những gì bạn muốn, nhưng tùy thuộc vào cấu hình khởi động hệ thống của bạn, điều này có thể không đúng lúc nào. Vì vậy, kiểm tra nó và xem nếu nó làm việc cho bạn.
MelBurslan

Âm thanh như một trường hợp cho Upstart?
nafg

Câu trả lời:


64

Là tập lệnh chỉ từng có ý định chạy một phút sau khi khởi động, hay nó cũng có thể được sử dụng vào lúc khác? Trong trường hợp trước, bạn có thể thêm sleep 60vào phần đầu của tập lệnh hoặc trong trường hợp sau, thêm nó vào tệp crontab:

@reboot sleep 60 && my_script.sh

Như đã được chỉ ra bởi sr_, tuy nhiên, có lẽ bạn đang giải quyết vấn đề này sai cách, và một tập lệnh init.d hoặc RC.d thích hợp sẽ là một giải pháp mạnh mẽ hơn.


1
Hoặc sử dụng tùy chọn dòng lệnh để điều chỉnh độ trễ (ví dụ: script -s Xsẽ dịch vào sleep Xbên trong tập lệnh).
peterph

Tôi có thể áp dụng điều này cho tác vụ tập tin trong /etc/init.d/ không?
Andres Angel

@AndresAngel - Tôi xin lỗi, tôi không biết. Tôi sử dụng FreeBSD mà không có taskrunner, cũng không, trong vấn đề đó,/etc/init.d
D_Bye

trên giấc ngủ rrc7 của tôi hoàn toàn không hoạt động, nó ngủ mãi mãi và không bao giờ quay trở lại.
Inder R Singh

16

Ví dụ, nếu bạn cần thực thi một cái gì đó sau khi khởi động lại khi mạng sẽ có sẵn, bạn có thể viết đơn vị systemd sẽ được thực thi vào thời gian cần thiết (tất nhiên điều này sẽ chỉ hoạt động trên các hệ thống có systemd).

Để làm như vậy, tạo tập tin /etc/systemd/system/my_script.servicevới nội dung sau đây:

[Unit]
Description=My script that requires network
After=network.target

[Service]
Type=oneshot
ExecStart=/full/path/to/my_script.sh

[Install]
WantedBy=multi-user.target

Sau đó thực hiện:

sudo systemctl daemon-reload
sudo systemctl enable my_script

Bạn đã hoàn tất!


11

Tôi sẽ sử dụng at. Như trong:

@reboot echo /root/bin/do_the_stuff | at now + 2 minutes
# at assigns it an execution time truncated to whole minutes,
# so this means it will execute in 1--2 minutes.

... với lời cảnh báo được đề cập thêm rằng nếu điều bạn thực sự muốn là chạy nó sau tất cả những thứ khác, bạn nên kiểm tra cách thực hiện điều đó trong init mà HĐH của bạn đang sử dụng.

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.