107.2 Bài 1
Chứng chỉ: |
LPIC-1 |
---|---|
Phiên bản: |
5.0 |
Chủ đề: |
107 Các Tác vụ Quản trị |
Mục tiêu: |
107.2 Tự động hóa các Các Tác vụ Quản trị Hệ thống bằng cách lập lịch trình công việc |
Bài: |
1 trên 2 |
Giới thiệu
Một trong những nhiệm vụ quan trọng nhất của một quản trị viên ưu tú là lập lịch trình cho các công việc cần được thực thi một cách thường xuyên. Ví dụ: quản trị viên có thể tạo và tự động hóa các công việc sao lưu, nâng cấp hệ thống và thực hiện nhiều hoạt động lặp đi lặp lại khác. Để làm được điều này, chúng ta có thể sử dụng tiện ích cron
. Tiện ích này rất hữu ích trong việc tự động hóa tác vụ lập lịch trình.
Lên lịch công việc với Cron
Trong Linux, cron
là một trình nền (daemon) chạy liên tục và sẽ "thức dậy" mỗi phút để kiểm tra một tập hợp các bảng nhằm tìm ra các tác vụ cần được thực thi. Các bảng này được gọi là bảng công việc định kỳ (crontabs) và chúng sẽ chứa các công việc định kỳ (cron jobs). Cron phù hợp với các máy chủ và hệ thống được bật nguồn liên tục vì mỗi công việc định kỳ sẽ chỉ được thực thi nếu hệ thống chạy đúng theo thời gian đã định. Nó có thể được sử dụng bởi người dùng thông thường (mỗi người dùng sẽ có bảng công việc định kỳ của riêng mình) cũng như siêu người dùng quản lý các bảng công việc định kỳ hệ thống.
Note
|
Trong Linux còn có tiện ích |
Bảng công việc định kỳ của Người dùng
Bảng công việc định kỳ của người dùng là các tệp văn bản quản lý việc lên lịch cho các công việc định kỳ do người dùng chỉ định. Các tệp này luôn được đặt tên theo tài khoản của người dùng đã tạo ra chúng, nhưng vị trí của tệp sẽ phụ thuộc vào bản phân phối được sử dụng (thường là một thư mục con của /var/spool/cron
).
Mỗi dòng trong một bảng công việc định kỳ của người dùng sẽ chứa sáu trường được phân tách bằng dấu cách:
-
Phút trong giờ (0-59).
-
Giờ trong ngày (0-23).
-
Ngày trong tháng (1-31).
-
Tháng trong năm (1-12).
-
Ngày trong tuần (0-7, trong đó, Chủ nhật=0 hoặc Chủ nhật=7).
-
Lệnh sẽ chạy.
Đối với tháng trong năm và ngày trong tuần, chúng ta có thể sử dụng ba chữ cái đầu tiên của tên thay vì số tương ứng.
Năm trường đầu tiên cho biết thời điểm thực thi lệnh được chỉ định trong trường thứ sáu và chúng có thể chứa một hoặc nhiều giá trị. Chúng ta có thể chỉ định nhiều giá trị bằng cách sử dụng:
*
(dấu hoa thị)-
Đề cập đến bất kỳ một giá trị nào.
,
(dấu phẩy)-
Chỉ định một danh sách các giá trị khả thi.
-
(dấu gạch ngang)-
Chỉ định một phạm vi các giá trị khả thi.
/
(dấu gạch chéo)-
Chỉ định khoảng thời gian nghỉ.
Nhiều bản phân phối sẽ có cả tệp /etc/crontab
có thể được sử dụng làm tài liệu tham khảo cho bố cục của tệp cron
. Dưới đây là một tệp /etc/crontab
ví dụ từ một bản cài đặt Debian:
SHELL=/bin/sh PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin # Example of job definition: # .---------------- minute (0 - 59) # | .------------- hour (0 - 23) # | | .---------- day of month (1 - 31) # | | | .------- month (1 - 12) OR jan,feb,mar,apr ... # | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat # | | | | | # * * * * * user-name command to be executed
Bảng công việc định kỳ của Hệ thống
Bảng công việc định kỳ của hệ thống là các tệp văn bản quản lý việc lên lịch cho các công việc định kỳ của hệ thống mà chỉ siêu người dùng mới có thể chỉnh sửa được. /etc/crontab
và tất cả các tệp trong thư mục /etc/cron.d
đều là các bảng công việc định kỳ hệ thống.
Hầu hết các bản phân phối đều có các thư mục /etc/cron.hourly
, /etc/cron.daily
, /etc/cron.weekly
và /etc/cron.monthly
chứa các tệp lệnh để chạy với tần suất thích hợp. Ví dụ: nếu muốn chạy tệp lệnh đó hàng ngày, ta có thể đặt tệp lệnh đó vào /etc/cron.daily
.
Warning
|
Một số bản phân phối sẽ sử dụng |
Cú pháp của bảng công việc định kỳ hệ thống cũng tương tự như cú pháp của bảng công việc định kỳ người dùng. Tuy nhiên, nó sẽ yêu cầu một trường bổ sung bắt buộc để chỉ định người dùng nào sẽ chạy một công việc định kỳ nhất định. Do đó, mỗi dòng trong bảng công việc định kỳ hệ thống sẽ chứa bảy trường được phân tách bằng dấu cách:
-
Phút trong giờ (0-59).
-
Giờ trong ngày (0-23).
-
Ngày trong tháng (1-31).
-
Tháng trong năm (1-12).
-
Ngày trong tuần (0-7, trong đó, Chủ nhật=0 hoặc Chủ nhật=7).
-
Tên tài khoản người dùng sẽ được sử dụng khi thực hiện lệnh.
-
Lệnh sẽ chạy.
Đối với bảng công việc định kỳ của người dùng, chúng ta có thể chỉ định nhiều giá trị cho các trường thời gian bằng cách sử dụng các toán tử *
, ,
, -
và /
. Ta cũng có thể chỉ ra tháng trong năm và ngày trong tuần bằng ba chữ cái đầu tiên của tên thay vì số tương ứng.
Thông số thời gian cụ thể
Khi chỉnh sửa tệp bảng công việc định kỳ, chúng ta cũng có thể sử dụng các phím tắt đặc biệt trong năm cột đầu tiên thay vì thông số thời gian:
@reboot
-
Chạy tác vụ được chỉ định một lần sau khi khởi động lại.
@hourly
-
Chạy tác vụ được chỉ định mỗi giờ một lần vào thời điểm bắt đầu của giờ.
@daily
(hoặc@midnight
)-
Chạy tác vụ được chỉ định mỗi ngày một lần vào lúc nửa đêm.
@weekly
-
Chạy tác vụ được chỉ định mỗi tuần một lần vào nửa đêm Chủ nhật.
@monthly
-
Chạy tác vụ được chỉ định mỗi tháng một lần vào lúc nửa đêm của ngày đầu tiên của tháng.
@yearly
(hoặc@annual
)-
Chạy tác vụ được chỉ định mỗi năm một lần vào nửa đêm ngày 1 tháng 1.
Biến Bảng công việc định kỳ
Trong tệp bảng công việc định kỳ đôi khi sẽ có các phép gán biến được xác định trước khi khai báo các tác vụ theo lịch trình. Các biến môi trường thường được đặt là:
HOME
-
Thư mục nơi
cron
gọi các lệnh (theo mặc định là thư mục chính của người dùng). MAILTO
-
Tên của người dùng hoặc địa chỉ mà đầu ra tiêu chuẩn và lỗi được gửi đến (theo mặc định là chủ sở hữu bảng công việc định kỳ). Người dùng có thể sử dụng nhiều giá trị được phân tách bằng dấu phẩy và một giá trị trống cho biết rằng không cần gửi bất kỳ một thư nào.
PATH
-
Đường dẫn có thể tìm thấy các lệnh.
SHELL
-
Vỏ sẽ sử dụng (theo mặc định là
/bin/sh
).
Tạo công việc định kỳ của Người dùng
Lệnh crontab
được sử dụng để duy trì các tệp bảng công việc định kỳ cho từng người dùng. Cụ thể, ta có thể chạy lệnh crontab -e
để chỉnh sửa tệp bảng công việc định kỳ của riêng mình hoặc tạo một bảng mới nếu nó chưa tồn tại.
$ crontab -e no crontab for frank - using an empty one Select an editor. To change later, run 'select-editor'. 1. /bin/ed 2. /bin/nano < ---- easiest 3. /usr/bin/emacs24 4. /usr/bin/vim.tiny Choose 1-4 [2]:
Theo mặc định, lệnh crontab
sẽ mở trình chỉnh sửa được chỉ định bởi các biến môi trường VISUAL
hoặc EDITOR
để người dùng có thể bắt đầu chỉnh sửa tệp bảng công việc định kỳ của mình bằng trình chỉnh sửa ưa thích. Một số bản phân phối (như trong ví dụ trên) sẽ cho phép chúng ta chọn trình chỉnh sửa từ danh sách khi crontab
được chạy lần đầu tiên.
Nếu muốn chạy tệp lệnh foo.sh
nằm trong thư mục chính của mình vào lúc 10:00 sáng hàng ngày, chúng ta có thể thêm dòng sau vào tệp bảng công việc định kỳ:
0 10 * * * /home/frank/foo.sh
Hãy xem xét các mục bảng công việc định kỳ mẫu sau:
0,15,30,45 08 * * 2 /home/frank/bar.sh 30 20 1-15 1,6 1-5 /home/frank/foobar.sh
Dòng đầu tiên cho biết tệp lệnh bar.sh
sẽ được thực thi vào Thứ Ba hàng tuần lúc 08:00 sáng, 08:15 sáng, 08:30 sáng và 08:45 sáng. Dòng thứ hai cho biết tệp lệnh foobar.sh
sẽ được thực thi lúc 08:30 tối từ thứ Hai đến thứ Sáu trong mười lăm ngày đầu tiên của tháng Một và tháng Sáu.
Warning
|
Mặc dù các tệp bảng công việc định kỳ có thể được chỉnh sửa thủ công nhưng người dùng vẫn được khuyến nghị sử dụng lệnh |
Ngoài tùy chọn -e
được đề cập ở trên, lệnh crontab
còn có các tùy chọn hữu ích khác:
-l
-
Hiển thị bảng công việc định kỳ hiện tại trên đầu ra tiêu chuẩn.
-r
-
Xóa bảng công việc định kỳ hiện tại.
-u
-
Chỉ định tên của người dùng có bảng công việc định kỳ cần sửa đổi. Tùy chọn này yêu cầu quyền gốc và cho phép siêu người dùng chỉnh sửa các tệp bảng công việc định kỳ của người dùng.
Tạo công việc định kỳ cho Hệ thống
Không giống như bảng công việc định kỳ của người dùng, bảng công việc định kỳ hệ thống được cập nhật bằng một trình chỉnh sửa. Do đó, chúng ta không cần chạy lệnh crontab
để chỉnh sửa /etc/crontab
và các tệp trong /etc/cron.d
. Hãy nhớ rằng khi chỉnh sửa các bảng công việc định kỳ hệ thống, ta phải chỉ định tài khoản sẽ được sử dụng để chạy công việc định kỳ đó (thường là siêu người dùng).
Ví dụ: nếu muốn chạy tệp lệnh barfoo.sh
nằm trong thư mục /root
hàng ngày lúc 01:30 sáng, ta có thể mở /etc/crontab
bằng trình chỉnh sửa ưa thích của mình và thêm dòng sau:
30 01 * * * root /root/barfoo.sh >>/root/output.log 2>>/root/error.log
Trong ví dụ trên, đầu ra của công việc đã được thêm vào /root/output.log
, trong khi các lỗi đã được thêm vào /root/error.log
.
Warning
|
Trừ khi đầu ra được chuyển hướng đến một tệp như trong ví dụ trên (hoặc biến |
Định cấu hình Quyền Truy cập vào tác vụ lập lịch trình công việc
Trong Linux, các tệp /etc/cron.allow
và /etc/cron.deny
được sử dụng để thiết lập các hạn chế cho bảng công việc định kỳ. Đặc biệt, chúng được sử dụng để cho phép hoặc không cho phép lập lịch trình công việc định kỳ cho những người dùng khác nhau. Nếu /etc/cron.allow
tồn tại, chỉ những người dùng (không phải siêu người dùng) được liệt kê trong đó mới có thể lập lịch trình các công việc định kỳ bằng lệnh crontab
. Nếu /etc/cron.allow
không tồn tại nhưng /etc/cron.deny
có tồn tại, chỉ những người dùng (không phải siêu người dùng) được liệt kê trong tệp này mới không thể lập lịch trình các công việc định kỳ bằng lệnh crontab
(trong trường hợp này là một tệp /etc/cron.deny
trống, có nghĩa là tất cả mọi người dùng đều được phép lập lịch trình các công việc định kỳ bằng crontab
). Nếu cả hai tệp này đều không tồn tại thì quyền truy cập của người dùng vào tác vụ lập lịch trình công việc định kỳ sẽ phụ thuộc vào bản phân phối được sử dụng.
Note
|
Các tệp |
Một giải pháp thay thế cho Cron
Bằng cách sử dụng systemd làm trình quản lý hệ thống và dịch vụ, chúng ta có thể đặt các _ bộ hẹn giờ_ (timer) thay thế cho cron
để lên lịch cho các tác vụ của mình. Bộ hẹn giờ là các tệp đơn vị systemd được xác định bằng hậu tố .timer
. Mỗi tệp này phải có một tệp đơn vị tương ứng mô tả đơn vị sẽ được kích hoạt khi đến giờ hẹn. Theo mặc định, một timer
sẽ kích hoạt một dịch vụ có cùng tên (không tính hậu tố).
Một bộ hẹn giờ sẽ bao gồm một phần [Timer]
chỉ định thời điểm để các công việc đã được lên lịch chạy. Cụ thể, ta có thể sử dụng tùy chọn OnCalendar=
để xác định bộ tính giờ thời gian thực hoạt động theo cách tương tự như các công việc định kỳ (chúng dựa trên các biểu thức sự kiện lịch). Tùy chọn OnCalendar=
yêu cầu cú pháp sau:
DayOfWeek Year-Month-Day Hour:Minute:Second
với DayOfWeek
(ngày trong tuần) là tùy chọn. Các toán tử *
, /
và ,
có cùng ý nghĩa như các toán tử được sử dụng cho công việc định kỳ, trong khi chúng ta có thể sử dụng ..
giữa hai giá trị để biểu thị một phạm vi liền kề. Đối với đặc tả DayOfWeek
, ta có thể sử dụng ba chữ cái đầu tiên của tên hoặc tên đầy đủ.
Note
|
Chúng ta cũng có thể xác định bộ hẹn giờ đơn điệu kích hoạt sau một khoảng thời gian trôi qua kể từ một điểm bắt đầu cụ thể (ví dụ: khi máy được khởi động hoặc khi chính bộ hẹn giờ được kích hoạt). |
Ví dụ: nếu muốn chạy dịch vụ có tên /etc/systemd/system/foobar.service
lúc 05:30 vào Thứ Hai đầu tiên của mỗi tháng, ta có thể thêm các dòng sau vào tệp đơn vị /etc/systemd/system/foobar.timer
tương ứng.
[Unit] Description=Run the foobar service [Timer] OnCalendar=Mon *-*-1..7 05:30:00 Persistent=true [Install] WantedBy=timers.target
Một khi đã tạo bộ hẹn giờ mới, chúng ta có thể kích hoạt và khởi động nó bằng cách chạy các lệnh sau với quyền gốc:
# systemctl enable foobar.timer # systemctl start foobar.timer
Chúng ta có thể thay đổi tần suất công việc đã lên lịch của mình, sửa đổi giá trị OnCalendar
rồi nhập lệnh systemctl daemon-reload
.
Cuối cùng, nếu muốn xem danh sách các bộ hẹn giờ đang hoạt động được sắp xếp theo thời gian trôi qua tiếp theo, ta có thể sử dụng lệnh systemctl list-timers
. Chúng ta cũng có thể thêm tùy chọn --all
để xem các đơn vị hẹn giờ không hoạt động.
Note
|
Hãy nhớ rằng bộ hẹn giờ sẽ được ghi vào nhật ký systemd và bạn có thể xem lại nhật ký của các đơn vị khác nhau bằng lệnh |
Thay vì dạng chuẩn hóa chi tiết được đề cập ở trên, chúng ta có thể sử dụng một số biểu thức đặc biệt mô tả tần suất cụ thể để thực hiện công việc:
hourly
-
Chạy tác vụ được chỉ định mỗi giờ một lần vào thời điểm bắt đầu giờ.
daily
-
Chạy tác vụ được chỉ định mỗi ngày một lần vào lúc nửa đêm.
weekly
-
Chạy tác vụ được chỉ định mỗi tuần một lần vào nửa đêm thứ Hai.
monthly
-
Chạy tác vụ được chỉ định mỗi tháng một lần vào lúc nửa đêm của ngày đầu tiên của tháng.
yearly
-
Chạy tác vụ được chỉ định mỗi năm một lần vào nửa đêm ngày đầu tiên của tháng Một.
Hãy xem các trang hướng dẫn để biết danh sách đầy đủ về thông số kỹ thuật, ngày và giờ tại systemd.timer(5)
.
Bài tập Hướng dẫn
-
Đối với mỗi phím tắt
crontab
sau đây, hãy cho biết thông số thời gian tương ứng (tức là năm cột đầu tiên trong tệpcrontab
của người dùng):@hourly
@daily
@weekly
@monthly
@annually
-
Đối với mỗi phím tắt
OnCalendar
sau đây, hãy chỉ ra thông số thời gian tương ứng (dạng chuẩn hóa chi tiết):hourly
daily
weekly
monthly
yearly
-
Hãy giải thích ý nghĩa của các thông số về thời gian sau đây được tìm thấy trong tệp
crontab
:30 13 * * 1-5
00 09-18 * * *
30 08 1 1 *
0,20,40 11 * * Sun
00 09 10-20 1-3 *
*/20 * * * *
-
Hãy giải thích ý nghĩa của các thông số thời gian sau đây được sử dụng trong tùy chọn
OnCalendar
của một tệp bộ hẹn giờ:*-*-* 08:30:00
Sat,Sun *-*-* 05:00:00
*-*-01 13:15,30,45:00
Fri *-09..12-* 16:20:00
Mon,Tue *-*-1,15 08:30:00
*-*-* *:00/05:00
Bài tập Mở rộng
-
Giả sử rằng bạn được phép lập lịch trình công việc bằng
cron
với tư cách là một người dùng thông thường, bạn sẽ sử dụng lệnh nào để tạo tệp bảng công việc định kỳ của riêng mình? -
Hãy tạo một công việc được lên lịch đơn giản để thực thi lệnh
date
vào lúc 01:00 chiều Thứ Sáu hàng tuần. Bạn có thể thấy đầu ra của công việc này ở đâu? -
Hãy tạo một công việc được lên lịch khác để thực thi tệp lệnh
foobar.sh
mỗi phút, chuyển hướng đầu ra đến tệpoutput.log
trong thư mục chính để chỉ có lỗi tiêu chuẩn được gửi cho bạn qua e-mail. -
Hãy xem mục
crontab
của công việc định kỳ mới được tạo. Tại sao không cần thiết phải chỉ định đường dẫn tuyệt đối của tệp lưu đầu ra tiêu chuẩn? Và tại sao bạn có thể sử dụng lệnh./foobar.sh
để thực thi tệp lệnh? -
Hãy chỉnh sửa mục nhập
crontab
trước đó bằng cách xóa chuyển hướng đầu ra và vô hiệu hoá công việc định kỳ đầu tiên bạn đã tạo. -
Làm cách nào để có thể gửi kết quả và lỗi của công việc định kỳ tới tài khoản người dùng
emma
qua e-mail? Và làm thế nào để có thể tránh gửi đầu ra tiêu chuẩn và lỗi qua e-mail? -
Hãy thực hiện lệnh
ls -l /usr/bin/crontab
. Bit đặc biệt nào sẽ được thiết lập và ý nghĩa của nó là gì?
Tóm tắt
Trong bài học này, chúng ta đã học về:
-
Sử dụng
cron
để chạy các công việc định kỳ. -
Quản lý công việc định kỳ.
-
Định cấu hình quyền truy cập của người dùng đối với tác vụ lập lịch trình công việc định kỳ.
-
Hiểu vai trò của đơn vị hẹn giờ systemd thay thế cho
cron
.
Các tệp và lệnh sau đã được thảo luận trong bài học này:
crontab
-
Duy trì các tệp
crontab
cho người dùng cá nhân. /etc/cron.allow
và/etc/cron.deny
-
Các tệp cụ thể được sử dụng để thiết lập các hạn chế cho
crontab
. /etc/crontab
-
Tệp bảng công việc định kỳ hệ thống.
/etc/cron.d
-
Thư mục chứa các tệp bảng công việc định kỳ hệ thống.
systemctl
-
Kiểm soát hệ thống systemd và quản lý dịch vụ. Liên quan đến bộ hẹn giờ, nó có thể được sử dụng để kích hoạt và khởi động chúng.
Đáp án Bài tập Hướng dẫn
-
Đối với mỗi phím tắt
crontab
sau đây, hãy cho biết thông số thời gian tương ứng (tức là năm cột đầu tiên trong tệpcrontab
của người dùng):@hourly
0 * * * *
@daily
0 0 * * *
@weekly
0 0 * * 0
@monthly
0 0 1 * *
@annually
0 0 1 1 *
-
Đối với mỗi phím tắt
OnCalendar
sau đây, hãy chỉ ra thông số thời gian tương ứng (dạng chuẩn hóa chi tiết):
|
|
|
|
|
|
|
|
|
|
-
Hãy giải thích ý nghĩa của các thông số về thời gian sau đây được tìm thấy trong tệp
crontab
:30 13 * * 1-5
Vào lúc 01h30 chiều các ngày trong tuần từ thứ Hai đến thứ Sáu
00 09-18 * * *
Hàng ngày và hàng giờ từ 09 giờ sáng đến 06 giờ chiều
30 08 1 1 *
Vào lúc 08h30 của ngày đầu tiên của tháng 1
0,20,40 11 * * Mặt trời
Chủ nhật hàng tuần lúc 11 giờ sáng, 11 giờ 20 sáng và 11 giờ 40 sáng
00 09 10-20 1-3 *
Vào lúc 09h00 từ ngày 10 đến ngày 20 tháng 1, tháng 2 và tháng 3
*/20 * * * *
Cứ hai mươi phút một lần
-
Hãy giải thích ý nghĩa của các thông số thời gian sau đây được sử dụng trong tùy chọn
OnCalendar
của một tệp bộ hẹn giờ:*-*-* 08:30:00
Hàng ngày vào lúc 08:30 sáng
Sat,Sun *-*-* 05:00:00
Vào lúc 05h00 sáng thứ bảy và chủ nhật
*-*-01 13:15,30,45:00
Vào lúc 01h15, 01h30 và 01h45 chiều những ngày đầu tiên của tháng
Fri *-09..12-* 16:20:00
Vào lúc 04:20 chiều Thứ Sáu hàng tuần trong tháng 9, tháng 10, tháng 11 và tháng 12
Mon,Tue *-*-1,15 08:30:00
Vào lúc 08h30 sáng ngày đầu tiên hoặc ngày 15 hàng tháng nếu ngày đó là thứ Hai hoặc thứ Ba
*-*-* *:00/05:00
Cứ năm phút một lần
Đáp án Bài tập Mở rộng
-
Giả sử rằng bạn được phép lập lịch trình công việc bằng
cron
với tư cách là một người dùng thồn thường, bạn sẽ sử dụng lệnh nào để tạo tệp bảng công việc định kỳ của riêng mình?dave@hostname ~ $ crontab -e no crontab for dave - using an empty one Select an editor. To change later, run 'select-editor'. 1. /bin/ed 2. /bin/nano < ---- easiest 3. /usr/bin/emacs24 4. /usr/bin/vim.tiny Choose 1-4 [2]:
-
Hãy tạo một công việc được lên lịch đơn giản để thực thi lệnh
date
vào lúc 01:00 chiều Thứ Sáu hàng tuần. Bạn có thể thấy đầu ra của công việc này ở đâu?00 13 * * 5 date
Đầu ra đã được gửi tới người dùng; để xem nó, bạn có thể sử dụng lệnh
mail
. -
Hãy tạo một công việc được lên lịch khác để thực thi tệp lệnh
foobar.sh
mỗi phút, chuyển hướng đầu ra đến tệpoutput.log
trong thư mục chính để chỉ có lỗi tiêu chuẩn được gửi cho bạn qua e-mail.*/1 * * * * ./foobar.sh >> output.log
-
Hãy xem mục
crontab
của công việc định kỳ mới được tạo. Tại sao không cần thiết phải chỉ định đường dẫn tuyệt đối của tệp lưu đầu ra tiêu chuẩn? Và tại sao bạn có thể sử dụng lệnh./foobar.sh
để thực thi tệp lệnh?cron
sẽ gọi các lệnh từ thư mục chính của người dùng trừ khi một vị trí khác được chỉ định bởi biến môi trườngHOME
trong tệpcrontab
. Vì lý do này, bạn có thể sử dụng đường dẫn tương đối của tệp đầu ra và chạy tệp lệnh với./foobar.sh
. -
Hãy chỉnh sửa mục nhập
crontab
trước đó bằng cách xóa chuyển hướng đầu ra và vô hiệu hoá công việc định kỳ đầu tiên bạn đã tạo.#00 13 * * 5 date */1 * * * * ./foobar.sh
Để vô hiệu hoá một công việc định kỳ, bạn chỉ cần chú thích dòng tương ứng trong tệp
crontab
. -
Làm cách nào để có thể gửi kết quả và lỗi của công việc định kỳ tới tài khoản người dùng
emma
qua e-mail? Và làm thế nào để có thể tránh gửi đầu ra tiêu chuẩn và lỗi qua e-mail?Để gửi đầu ra tiêu chuẩn và lỗi tới
emma
, bạn phải đặt biến môi trườngMAILTO
trong tệpcrontab
của mình như sau:MAILTO="emma"
Để báo cho
cron
rằng không cần gửi bất kỳ thư nào, bạn có thể gán một giá trị trống cho biến môi trườngMAILTO
.MAILTO=""
-
Hãy thực hiện lệnh
ls -l /usr/bin/crontab
. Bit đặc biệt nào sẽ được thiết lập và ý nghĩa của nó là gì?$ ls -l /usr/bin/crontab -rwxr-sr-x 1 root crontab 25104 feb 10 2015 /usr/bin/crontab
Lệnh
crontab
có tập bit SGID (ký tựs
thay vì cờ thực thi cho nhóm), có nghĩa là nó được thực thi với các đặc quyền của nhóm. Đây là lý do tại sao người dùng thông thường có thể chỉnh sửa tệpcrontab
của họ bằng lệnhcrontab
. Hãy lưu ý rằng nhiều bản phân phối có thể đặt quyền cho tệp để tệpcrontab
chỉ có thể được chỉnh sửa thông qua lệnhcrontab
.