Câu hỏi Làm cách nào để thiết lập công việc Cron?


Tôi muốn lên lịch một nhiệm vụ để chạy một cách thường xuyên và đã nghe nói rằng Cron là cách để làm điều này.

Làm cách nào để thêm các công việc Cron vào Ubuntu?


486
2017-08-16 08:25


gốc




Các câu trả lời:


Đặt tập lệnh shell vào một trong các thư mục sau: /etc/cron.daily, /etc/cron.hourly, /etc/cron.monthly hoặc là /etc/cron.weekly.

Nếu những thứ này không đủ cho bạn, bạn có thể thêm các tác vụ cụ thể hơn, ví dụ: hai lần một tháng hoặc mỗi 5 phút. Đi đến terminal và gõ:

crontab -e

Điều này sẽ mở crontab cá nhân của bạn (tệp cấu hình cron). Dòng đầu tiên trong tệp đó giải thích tất cả! Trong mỗi dòng, bạn có thể định nghĩa một lệnh để chạy và lịch biểu của nó, và định dạng khá đơn giản khi bạn nhận được lệnh của nó. Cấu trúc là:

minute hour day-of-month month day-of-week command

Đối với tất cả các số bạn có thể sử dụng danh sách, ví dụ: 5,34,55 trong trường phút sẽ có nghĩa là chạy ở 5 quá khứ, 34 trong quá khứ và 55 giờ qua bất kỳ giờ nào được xác định.

Bạn cũng có thể sử dụng khoảng thời gian. Chúng được định nghĩa như sau: */20. Ví dụ này có nghĩa là mỗi 20, vì vậy trong cột phút, nó tương đương với 0,20,40.

Vì vậy, để chạy một lệnh mỗi thứ Hai lúc 5:30 chiều:

30 17 * * 1 /path/to/command

hoặc sau mỗi 15 phút

*/15 * * * * /path/to/command

Lưu ý rằng ngày trong tuần bắt đầu từ 0-6 trong đó 0 là Chủ nhật.

Bạn có thể đọc thêm đây.


600
2017-08-16 08:58



Đây là toàn hệ thống và chạy với các đặc quyền cao. Tôi sẽ không đặt bất cứ điều gì ở đó trừ khi có nhu cầu cấp thiết để truy cập hoặc cho phép. Theo quy tắc chung, hãy thử làm những việc không có khả năng. Do đó, tôi thích câu trả lời này tốt hơn: ubuntu.stackexchange.com/questions/2368/how-do-i-setup-cron-job/… - H Marcelo Morales
@Marcelo Morales, Mà cũng sẽ chạy các lệnh được đưa ra như là người chủ! nếu bạn mặt khác không sử dụng sudo thì bạn sẽ tạo một người dùng crontab và điều này sẽ được chạy như người dùng đã tạo ra nó! - LassePoulsen
* / 15 * * * * / path / to / command rất tiện dụng cho tôi! cảm ơn! - Andrew Odendaal
Cần lưu ý những thay đổi này được áp dụng tự động, bạn không cần phải khởi động lại / tải lại bất kỳ thứ gì. - Molomby
Một mẹo hữu ích khác là thay vì */15 * * * * /path/to/command, bạn có thể làm @reboot /path/to/command để thực hiện điều gì đó khi khởi động. - Kenneth Worden


Nếu công việc bạn muốn chạy có thể chạy với các đặc quyền giống như người dùng của bạn, tôi khuyên bạn nên sử dụng một người dùng crontab mà bạn có thể chỉnh sửa bằng cách chạy EDITOR="gedit" crontab -e(sẽ được sử dụng gedit để chỉnh sửa tệp crontab) hoặc đơn giản crontab -e(sẽ sử dụng trình soạn thảo mặc định) trong một thiết bị đầu cuối.

Ví dụ: nếu bạn muốn chạy thứ gì đó cứ 10 phút, bạn thêm một dòng như thế này

*/10 * * * * /usr/bin/somedirectory/somecommand

và lưu tệp.

Bạn có thể xem nội dung của người dùng crontab với crontab -l.

Cách linh hoạt nhất là sử dụng crontab hệ thống mà bạn có thể chỉnh sửa bằng cách chạy sudo crontab -e trong một thiết bị đầu cuối. Điều này sẽ cho phép bạn chạy các lệnh của bạn dưới dạng root (trong trường hợp bạn cần mức độ đặc quyền đó) hoặc bất kỳ người dùng nào khác trên hệ thống.

Sau đó, nếu bạn muốn chạy một vài thứ cứ 10 phút một lần nguồn gốc, ví dụ, bạn thêm một dòng như thế này

*/10 * * * * root /usr/bin/somedirectory/somecommand

và lưu tệp.(thông báo việc thêm người dùng vào dòng)

Bạn có thể xem nội dung của tệp crontab hệ thống với sudo crontab -l.

Thêm chi tiết tại: https://help.ubuntu.com/community/CronHowto


93
2017-08-16 09:21



Đây là một cron manipulator tương tác ngọt ngào sẽ cung cấp cho bạn tiếng Anh đến thời gian cron crontab.guru - CTS_AE


Nếu bạn thích sử dụng GUI, bạn có thể vào Trung tâm phần mềm và cài đặt Tác vụ theo lịch (hoặc chạy sudo apt-get install gnome-schedule). Nó sẽ cung cấp một giao diện đồ họa mạnh mẽ để thêm các tác vụ cron.

Lưu ý rằng nếu bạn sử dụng phương pháp này, các tác vụ theo mặc định sẽ được thực hiện như người dùng của riêng bạn, không phải là gốc. Đây thường là một điều tốt.


51
2018-01-31 23:59



không có sẵn cho 16.04 rõ ràng bugs.launchpad.net/ubuntu/+source/gnome-schedule/+bug/1576060 - TankorSmash
@TankorSmash Bạn có thể tải xuống đây - M. Becerra
Yêu cầu gói không thể được đáp ứng vào ngày 16.04 - Odysseus Ithaca


Tôi khuyên bạn nên Trình lập lịch tác vụ của KDE (kde-config-cron)  Install kde-config-cron. Truy cập nó từ Cài đặt hệ thống bên trong Bảng kế hoạch module ở đó.

Nó quản lý cả Crontabs cá nhân và hệ thống, và dễ dàng tạo ra các ranh giới thời gian làm tôi ngạc nhiên (xem ảnh chụp màn hình bên dưới). Tôi nghĩ phần này thực sự bị đánh giá thấp.

enter image description here


24
2018-02-11 14:35





Trình lập lịch tác vụ KDE sẽ không hoạt động trong Ubuntu thông thường. Nó chỉ hoạt động trong các hệ thống KDE như KUbuntu. Đối với hệ thống không KDE, bạn sẽ thích sử dụng gnome-schedule

$ sudo apt-get install gnome-schedule

Ứng dụng là các tác vụ theo lịch trong Dash.


11
2017-09-27 20:25



Nó không tìm thấy cho Ubuntu 16.04 - SaidbakR
Xin hãy xem I can't install gnome schedule on Ubuntu 16.04 @ askubuntu.com/questions/785657/…. Có một gói để tải xuống @ bugs.launchpad.net/ubuntu/+source/gnome-schedule/+bug/1576060/…. Chỉ cần thực hiện $ sudo dpkg -i gnome-schedule_2.3.0-0ubuntu16.04_amd64.deb - Antonio


Tôi muốn thiết lập một công việc Cron để chạy qua một kịch bản bash, do đó, thực thi kịch bản sẽ thêm một công việc cron.

Tôi nhận ra rằng khi bạn sử dụng:

crontab -e 

Sau đó, nó tạo tệp:

/var/spool/cron/crontabs/root 

Trong đó root là tên của người dùng đang chạy lệnh crontab. Vì vậy, dựa trên điều này và trong 14.04 ít nhất, chúng ta có thể thực hiện các lệnh bash sau đây để tạo một công việc Cron mới:

echo "30 17 * * 1 /path/to/command" > /var/spool/cron/crontabs/root

Chúng tôi cũng cần đặt quyền sở hữu chính xác cho tệp:

chown root:root /var/spool/cron/crontabs/root

Và đặt quyền chính xác:

chmod 600 /var/spool/cron/crontabs/root

Nếu khi bạn chạy crontab -e đã có các công việc Cron trong danh sách, sau đó bạn có thể thêm vào danh sách bằng cách sử dụng lệnh sau:

echo "30 17 * * 1 /path/to/command" >> /var/spool/cron/crontabs/root

8