Cách đơn giản để chạy lệnh, giả sử, 8 giờ kể từ bây giờ? Tôi có thể nghĩ theo cách này:
nohup bash -c "sleep 28800 ; ./mycommand.sh" &
Có cách nào "đúng đắn" hơn không?
Cách đơn giản để chạy lệnh, giả sử, 8 giờ kể từ bây giờ? Tôi có thể nghĩ theo cách này:
nohup bash -c "sleep 28800 ; ./mycommand.sh" &
Có cách nào "đúng đắn" hơn không?
Câu trả lời:
Bạn có thể sử dụng at
lệnh. Các at
lệnh thực thi sau đó. Các at
tiện ích có trách nhiệm đọc lệnh từ đầu vào tiêu chuẩn và nhóm chúng lại với nhau như một ít công việc, được thực hiện tại một thời điểm sau đó.
Thông thường, at
được cài đặt theo mặc định trong Ubuntu, nhưng nếu bản phát hành của bạn không bao gồm nó, hãy cài đặt qua:
sudo apt-get install at
Để biết thêm thông tin, các tùy chọn, ví dụ và những thứ khác, hãy xem Kho lưu trữ trang chủ Ubuntu
Thí dụ:
at now +8 hours -f ~/myscript.sh
Bạn cũng có thể sử dụng các tốc ký thuận tiện, như tomorrow
hoặc noon
, như trong
echo "tweet fore" | at teatime
Cảnh báo: Điều này sẽ chạy lệnh ở bên trái của đường ống ngay lập tức nhưng chỉ xuất hiện đầu ra của nó sau đó. Ví dụ này cũng cho thấy cách bạn có thể dẫn các hành động vàoat
. at -c
là cách bạn có thể kiểm tra các hành động được lên lịch, mà bạn có thể liệt kê một cách thuận tiện với số của chúng, như với:
at -c 3
at now +8 hours -f ~/myscript.sh
at 8:00
phải chạy lệnh vào một thời điểm tuyệt đối và batch
cho "khi có vẻ như máy tính không hoạt động"
teatime
là lúc 4 giờ chiều. Vì một số lý do, nó không được đề cập trong manpages.ubfox.com/manpages/rared/man1/at.1poseix.html nhưng nó nằm trong man at
và ở đây manpages.ubfox.com/manpages/rared/en/man1/at.1.html .
gpio write 8 1
nhưng nó đã được thực hiện ngay lập tức.
Có, bạn có thể thiết lập một công việc định kỳ.
Ví dụ: nếu bây giờ thời gian là 14:39:00 và hôm nay là thứ Sáu, 30 tháng 8, bạn có thể thêm công việc định kỳ sau (sẽ được thực hiện sau 8 giờ) trong tệp crontab của bạn bằng crontab -e
lệnh:
39 22 30 8 5 /path/to/mycommand.sh
Thông tin thêm về:
crontab
cho đến khi bạn loại bỏ nó. Một năm sau, khi bạn quên mất ai đã đặt nó ở đó và tại sao, bạn sẽ phải gãi đầu tự hỏi phải làm gì với mệnh lệnh.
Sử dụng giao diện Gnome có trụ sở tại cron
, at
và những thứ tương tự:
Việc giới thiệu CronHowto gợi ý sử dụng gnome-schedule
gui, sẽ tốt hơn nhiều so với việc nhập tất cả rác vào thiết bị đầu cuối (đặc biệt đối với người dùng Ubuntu "trung bình" không phải là người dùng "power" * nix / bsd.)
Chạy nó bằng cách sử dụng Unity Dash (hoặc menu ứng dụng khác) để tìm Nhiệm vụ theo lịch hoặc chạy gnome-schedule
.
Trên các hệ thống Ubuntu dựa trên Gnome Công cụ tác vụ theo lịch trình Gnome (từ gói gnome-calendar) trong Ứng dụng -> Công cụ hệ thống cung cấp giao diện đồ họa với lời nhắc sử dụng Cron. Trang web của dự án có tại http://gnome-schedule.sourceforge.net/ ; phần mềm có thể cài đặt từ Trung tâm phần mềm hoặc bằng cách nhập
sudo apt-get install gnome-schedule
trong một thiết bị đầu cuối.
Sử dụng gnome-schedule
, đối với tập lệnh trong thư mục chính của bạn, lệnh "at" mới sẽ được thiết lập bằng loại cửa sổ này:
Tôi đã tìm ra một cách nhanh chóng và bẩn thỉu để làm điều này trước khi tôi phát hiện ra at
là một điều.
Giả sử bạn muốn tập lệnh của mình chạy vào buổi trưa:
until [[ "$(date)" =~ "12:00:" ]]; do
sleep 10
done
./mycommand.sh
Giả sử bạn muốn nó chạy vào ngày mai vào buổi trưa (hôm nay là ngày 24 tháng 11 đối với tôi):
until [[ "$(date)" =~ "25 12:00:" ]]; do
sleep 30
done
./mycommand.sh
Cập nhật : Phương pháp tốt hơn một chút: chỉ kiểm tra các số bạn quan tâm, sử dụng date +FORMAT
:
until [[ $(date +%H:%M) == 21:06 ]]; do
...
at
, cron
hoặc bất kỳ ứng dụng lên lịch thực khác. Lập kế hoạch nhiệm vụ là khó khăn, và không phải là một bánh xe bạn nên phát minh lại.
at
.
at
là vì công việc của nó sẽ tồn tại khi khởi động lại.
nohup
+sleep
? Tại sao nó "không đúng"?