Làm thế nào để chạy một tập lệnh tại một thời điểm nhất định trên Linux? [đóng cửa]


81

Tôi có một tệp văn bản chứa ngày và giờ cụ thể. Tôi muốn có thể chạy một tập lệnh tại thời điểm được chỉ định trong tệp đó. Làm thế nào bạn sẽ đạt được điều đó? Tạo một tập lệnh khác chạy trong nền (kiểu ngừng hoạt động) và kiểm tra mỗi giây xem thời gian hiện tại có khớp với thời gian trong tệp không? Có cách nào khác không? Máy là một máy chủ Linux , Debian wheezy. Cảm ơn trước


4
Bất kỳ lý do tại sao cron sẽ không hoạt động?
lreeder 22/09/13

12
Tại sao chủ đề này lại đóng cửa ?? Đó là một câu hỏi rất hợp lý. Tìm kiếm của Google đưa bạn đến vị trí số 1 Và câu trả lời khá khó hiểu. Vì vậy, một người có thể trả lời này là rõ ràng bằng tiếng Anh sẽ bị chặn
Richard de Ree

2
@Richard Tôi nghi ngờ lý do StackOverflow đóng quá nhiều câu hỏi như thế này là để khuyến khích người dùng đặt các câu hỏi lạc đề ở đây trên trang StackExchange thích hợp. Có khá nhiều trang SE mới trước đây không tồn tại. Ví dụ, có một số câu hỏi Vim rất hữu ích trên SO đã bị đóng lại là lạc đề, và bây giờ có Vi / Vim SE, những câu hỏi đó sẽ có chủ đề ở đó. Chỉ đang trầm ngâm. Tuy nhiên, điều này vẫn có vẻ như một câu hỏi lập trình
mgarey

2
Tbh Tôi quên cách sử dụng cron mỗi khi tôi học nó, và tôi không cần bất cứ điều gì nâng cao.
sudo

Câu trả lời:


148

Nhìn vào phần sau:

echo "ls -l" | at 07:00

Dòng mã này thực thi "ls -l" tại một thời điểm cụ thể. Đây là một ví dụ về việc thực thi một cái gì đó (một lệnh trong ví dụ của tôi) tại một thời điểm cụ thể. "at" là lệnh bạn thực sự đang tìm kiếm. Bạn có thể đọc thông số kỹ thuật tại đây:

http://manpages.ubuntu.com/manpages/precise/en/man1/at.1posix.html http://manpages.ubuntu.com/manpages/xenial/man1/at.1posix.html

Hy vọng nó giúp!


2
nhận được một lỗi Can't open /var/run/atd.pid to signal atd. No atd running?bất kỳ manh mối?
HappyCoding

2
Bạn cần atdchạy daemon để sử dụng at. Trên Manjaro OpenRC, bạn có thể chỉ cần cài đặt at-openrcvà thêm dịch vụ daemon atd với: sudo rc-update add atdvà bắt đầu với sudo rc-service atd start. Thông thường, atgói này đã bao gồm một systemddịch vụ (hệ thống init / dịch vụ mặc định trên nhiều hệ điều hành Linux khác nhau bao gồm cả Ubuntu) mà nó có thể được sudo systemctl start atdkhởi động và kích hoạt tự động khởi động trên init với sudo systemctl enable atd.
Manoel Vilela

8
Trong trường hợp của tôi in này ra "Nhiệm vụ 6 tại 2017/08/21 10:53" ngay lập tức ...
Jewenile

BTW, tài liệu bash của tôi mô tả at -ccách sử dụng. Nó để làm gì, nếu cách thực hiện một lệnh là đưa nó vào std trong?
Tom Russell

Tập lệnh này sẽ chạy sau nếu hệ thống bị tắt nguồn vào thời điểm đó?
shjit

18

Các atlệnh tồn tại đặc biệt cho mục đích này (không giống như cronđó là dành cho lịch công việc định kỳ).

at $(cat file) </path/to/script

1
với bash, bạn muốn viết$(< file)
glenn jackman

10

Cron rất tốt cho một thứ gì đó sẽ chạy định kỳ, chẳng hạn như 4 giờ sáng Thứ Bảy hàng tuần. Ngoài ra còn có anacron , hoạt động xung quanh việc tắt nguồn, ngủ và những thứ khác. Cũng như tại .

Nhưng đối với giải pháp một lần, không yêu cầu root hoặc bất cứ thứ gì, bạn chỉ có thể sử dụng ngày tháng để tính toán giây kể từ kỷ nguyên của thời gian mục tiêu cũng như thời điểm hiện tại, sau đó sử dụng expr để tìm sự khác biệt và ngủ nhiều giây đó.


10
Một atcông việc sẽ vẫn được lên kế hoạch ngay cả khi máy tính được khởi động lại trong khi chờ đợi.
tripleee

8

Thông thường trong Linux, bạn sử dụng crontabcho loại tác vụ được quy định này. Nhưng bạn phải chỉ định thời gian khi bạn "thiết lập bộ đếm thời gian" - vì vậy nếu bạn muốn nó có thể định cấu hình trong chính tệp, bạn sẽ phải tạo một số cơ chế để thực hiện điều đó.

Nhưng nói chung, bạn sẽ sử dụng ví dụ:

30 1 * * 5 /path/to/script/script.sh

Sẽ thực thi tập lệnh vào thứ Sáu hàng tuần lúc 1:30 (AM) Tại đây:

30 là phút

1 là giờ

2 * tiếp theo là day of monthmonth(theo thứ tự đó) và 5là ngày trong tuần


2
vậy bạn sẽ kích hoạt lệnh đó như thế nào?
Aaron Ullal 22/09/13

1
Crontab Guru ( crontab.guru ) là một công cụ hữu ích để cấu hình crontab.
Umesh .A Bhat
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.