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 @reboot
như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?
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 @reboot
như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?
Câu trả lời:
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 60
và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.
script -s X
sẽ dịch vào sleep X
bên trong tập lệnh).
taskrunner
, cũng không, trong vấn đề đó,/etc/init.d
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.service
vớ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!
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.