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?
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:
Đặ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.monthly
hoặ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,55
trong 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 .
*/15 * * * * /path/to/command
, bạn có thể @reboot /path/to/command
thực hiện để thực hiện một cái gì đó khi khởi động.
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/crontab
mà 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
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.
Tôi khuyên bạn nên Lập lịch tác vụ của KDE ( 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.
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.
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
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
Ví dụ về việc chạy tập lệnh test_cron.sh
bằ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ư $USER
trong 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 myname
tôi thêm nhiệm vụ mới để thực hiện test_cron
mỗ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)