File crontab nằm ở đâu?

Cron là chương trình để xử lý các công việc lặp đi lặp lại. Cron là một daemon, nghĩa là nó chạy nền để thực thi những công việc được chỉ định mà không cần tương tác.

Trong file crontab, mỗi dòng là một công việc được cron thực thi, có dạng như sau

# ┌───────────── minute (0 - 59)
# │ ┌───────────── hour (0 - 23)
# │ │ ┌───────────── day of the month (1 - 31)
# │ │ │ ┌───────────── month (1 - 12)
# │ │ │ │ ┌───────────── day of the week (0 - 6) (Sun to Sat;
# │ │ │ │ │                                   7 is also Sun)
# │ │ │ │ │
# │ │ │ │ │
# * * * * * <command to execute>

Tham khảo tại đây hay tại đây

Các file crontab nằm ở đâu?

Cron có thể chạy dưới quyền của một user, vì vậy có crontab của user.

Khi muốn xem file crontab của user nào thì chỉ cần gõ lệnh

sudo -u <user> crontab -l
hay
crontab -u <user> -l

# Thí dụ
crontab -u www-data -l

Tuy nhiên có những file crontab nằm riêng lẻ chứ không gộp trong crontab của user. Có thể chia làm 3 loại file crontab

  1. crontab của user: Các file crontab của user soạn thảo bởi lệnh sudo -u <user> crontab -e hay crontab -u <user> -e đều nằm ở /var/spool/cron/crontabs.
    Soạn thảo các file này bằng dòng lệnh như trên thuận tiện hơn so với dòng lệnh sudo nano /var/spool/cron/crontabs/<user> do quyền đọc ghi bị hạn chế trên thư mục và file
  2. /etc/cron.*: Dùng lệnh ls -l /etc/cron.* để xem danh sách các file này, gồm các file trong thư mục /etc/cron.d, /etc/cron.daily, /etc/cron.hourly, /etc/cron.monthly, /etc/cron.weekly. Nội dung của chúng có thể là các đoạn script được gọi chạy định kỳ tùy được đặt ở thư mục nào
  3. system crontab: Được mô tả trong file /etc/crontab hoặc được đặt trong /etc/cron.d

Output của cron

  • Một dòng lệnh của crontab có thể có output. Output này mặc định sẽ được gởi qua email. Cần thêm 2 dòng trong file crontab để chỉ định email gời từ đâu, cho ai?
MAILFROM=from@domain.com
MAILTO=me@my.home

Tất nhiên hệ thống phải có thể gửi email bằng sendmail. Có thể cài đặt msmtp hoặc ssmtp hoặc postfix để gửi mail.

  • Với những dòng lệnh lặp lại quá nhiều lần, có thể chặn gửi mail bằng cách cho output về /dev/null
*/3 * * * * yr.command > /dev/null

Thí dụ: nextcloud định kỳ 5 phút scan file trong external storage và do đó gửi hàng đống email. Chúng ta chặn việc gởi mail bằng cách soạn thảo lại crontab của user www-data

## sudo -u www-data crontab -e
## hay
## crontab -u www-data -e

*/5 * * * * /usr/bin/php -f /mnt/www/nextcloud/cron.php > /dev/null
*/5 * * * * /usr/bin/php /mnt/www/nextcloud/occ files:scan -n --all > /dev/null

Comments Off on File crontab nằm ở đâu?

Filed under Software

Comments are closed.