Làm cách nào để thiết lập công việc Cron?


534

Tôi muốn lên lịch cho một nhiệm vụ để chạy 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 trong Ubuntu?

Câu trả lời:


655

Đặt một kịch bản shell trong một trong các thư mục này: /etc/cron.daily, /etc/cron.hourly, /etc/cron.monthlyhoặc /etc/cron.weekly.

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

crontab -e

Điều này sẽ mở crontab cá nhân của bạn (tập tin cấu hình cron). Dòng đầu tiên trong tập tin đó giải thích tất cả! Trong mỗi dòng, bạn có thể xác định 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 nắm bắt được 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,55trong trường phút sẽ có nghĩa là chạy ở 5 quá khứ, 34 quá khứ và 55 quá khứ bất kể giờ nào được xác định.

Bạn cũng có thể sử dụng khoảng. Chúng được định nghĩa như thế này : */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 vào mỗi thứ Hai lúc 5:30 chiều:

30 17 * * 1 /path/to/command

hoặc cứ sau 15 phút

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

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

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


7
Đây là toàn hệ thống và chạy với đặc quyền cao. Tôi sẽ không đặt bất cứ thứ gì ở đó trừ khi có nhu cầu cấp thiết để truy cập hoặc cho phép. Theo nguyên tắc thông thường, hãy cố gắng làm những thứ không có khả năng. Vì vậy, 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

5
@Marcelo Morales, cũng sẽ chạy các lệnh đã cho dưới dạng root! mặt khác, nếu bạn không sử dụng sudo thì bạn sẽ tạo một crontab người dùng và điều này sẽ được chạy như người dùng đã tạo ra nó!
LassePoulsen

4
* / 15 * * * * / path / to / lệnh rất tiện cho tôi! cảm ơn!
Andrew Odendaal

18
Đáng 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 cứ thứ gì.
Molomby

6
Một mẹo hữu ích khác là thay vì */15 * * * * /path/to/command, bạn có thể @reboot /path/to/commandthực hiện để thực hiện một cái gì đó khi khởi động.
Kenneth Worden

102

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

Ví dụ, nếu bạn muốn chạy một cái gì đó cứ sau 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 tin.

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

Để thêm một công việc định kỳ chạy bằng root, bạn có thể chỉnh sửa crontab của root bằng cách chạy sudo crontab -e.

Cách linh hoạt nhất là sử dụng crontab hệ thống /etc/crontabmà bạn chỉ có thể chỉnh sửa với quyền root. Trong tệp này, người dùng mỗi lệnh sẽ được chạy như được chỉ định, do đó bạn có thể chạy các lệnh của mình 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.

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

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

(chú ý thêm người dùng vào dòng)

Bạn có thể xem nội dung của tập tin crontab hệ thống với cat /etc/crontab.

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


1
Đây là một trình điều khiển cron tương tác ngọt ngào sẽ cung cấp cho bạn tiếng Anh theo thời gian cronab.guru
CTS_AE

52

Nếu bạn thích làm điều đó bằng GUI, bạn có thể đến Trung tâm phần mềm và cài đặt các tác vụ theo lịch trình (hoặc chạy sudo apt-get install gnome-schedule). Nó sẽ cung cấp một GUI mạnh mẽ để thêm các tác vụ cron.

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



@TankorSmash Bạn có thể lấy nó ở đây
M. Becerra

Yêu cầu gói không thể được đáp ứng vào ngày 16.04
Odysseus Ithaca

26

Tôi khuyên bạn nên Lập lịch tác vụ của KDE ( kde-config-cron) Cài đặt kde-config-cron . Truy cập nó từ Cài đặt hệ thống trong mô đun Lập lịch tác vụ ở đó.

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

nhập mô tả hình ảnh ở đây


11

Bộ 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ư KUbfox. Đối với hệ thống không phải KDE, bạn sẽ thích sử dụng lịch trình gnome

$ sudo apt-get install gnome-schedule

Ứng dụng này được lên lịch tác vụ trong Dash.


Nó không được tìm thấy cho Ubuntu 16.04
SaidbakR

Xin vui lòng xem tại I can't install gnome schedule on Ubuntu 16.04@ askubfox.com/questions/785657/ săn . Có một gói để tải xuống @ bug.launchpad.net/ubfox/+source/gnome-schedule/+orms/1576060/ . Chỉ cần thực hiện$ sudo dpkg -i gnome-schedule_2.3.0-0ubuntu16.04_amd64.deb
Antonio

10

Tôi muốn thiết lập một công việc Cron để chạy qua một tập lệnh bash, vì vậy việc thực thi tập lệnh sẽ thêm một công việc định kỳ.

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

crontab -e 

Sau đó, nó tạo ra các tập tin:

/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à ít nhất là trong 14.04, chúng ta có thể thực hiện các lệnh bash sau để 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, thì bạn có thể nối thêm vào danh sách bằng lệnh sau:

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

2

Ví dụ về việc chạy tập lệnh test_cron.shbằng cron mỗi phút trên Ubuntu 18.04 bằng liên kết tượng trưng:

test_cron.sh tập tin:

#!/bin/bash
echo "System backuped" >> /media/myname/data/backup/backup_tmp.log

Nếu bạn muốn sử dụng các biến môi trường trong tập lệnh của mình như $USERtrong các đường dẫn, tốt hơn là nhập đường dẫn chính xác, bash sẽ không biết các biến của bạn tại thời điểm thực hiện.

myname là tên người dùng (một phần của nhóm gốc, tôi không chắc rằng quyền root là cần thiết).

Cho phép người dùng đặt công việc định kỳ, tệp sẽ được tạo nếu cần:

sudo nano /etc/cron.allow

root
myname

Đường dẫn đến kịch bản là /home/myname/shell/test_cron.sh

Tôi đã thay đổi chủ sở hữu và làm cho nó thực thi:

sudo chown myname /home/myname/shell/test_cron.sh
chmod +x /home/myname/shell/test_cron.sh

Tôi đã thêm liên kết tượng trưng:

sudo ln -s /home/myname/shell/test_cron.sh /usr/bin/test_cron

Đăng nhập khi mynametôi thêm nhiệm vụ mới để thực hiện test_cronmỗi phút.

crontab -e

*/1 * * * * test_cron

Để kiểm tra nếu lệnh trong danh sách:

crontab -l

*/1 * * * * test_cron

Để kiểm tra thực hiện

grep -i cron /var/log/syslog

Nov 17 12:28:01 myname-ubuntu CRON[13947]: (myname) CMD (system-backup)
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.