Làm thế nào có thể nhận được một danh sách tất cả các công việc định kỳ theo lịch trình trên máy của tôi?


201

Sysadmin của tôi đã thiết lập một loạt các công việc định kỳ trên máy của tôi. Tôi muốn biết chính xác những gì được lên lịch cho thời gian. Làm thế nào tôi có thể có được danh sách đó?


3
Đây không phải là câu trả lời cho câu hỏi, mà chỉ là một lưu ý về thực tiễn tốt nhất. Một có thể cấu hình các như công ăn việc làm cho mỗi người dùng cron cho roothay apachehoặc bất cứ điều gì, nhưng người ta nên sử dụng /etc/crontabhoặc (tốt hơn, trong hầu hết các distro) /etc/cron.d/etc/cron.[timeframe].
mattdm


Tôi đã đăng một tập lệnh tự động hóa mức độ này ở mức độ hữu ích tại: - stackoverflow.com/questions/134906/ ( Nó không hoàn hảo nhưng có thể đáp ứng 90% nhu cầu. Đó là một ví dụ tốt về những gì không viết trong bash.
collier david

Câu trả lời:


143

Tùy thuộc vào cách hệ thống linux của bạn được thiết lập, bạn có thể xem trong:

  • /var/spool/cron/* (người dùng crontabs)
  • /etc/crontab (crontab toàn hệ thống)

Ngoài ra, nhiều distro có:

  • /etc/cron.d/* Các cấu hình này có cùng cú pháp như /etc/crontab

  • /etc/cron.hourly, /etc/cron.daily, /etc/cron.weekly,/etc/cron.monthly

Đây chỉ đơn giản là các thư mục chứa các tệp thực thi được thực thi hàng giờ, hàng ngày, hàng tuần hoặc hàng tháng, theo tên thư mục của chúng.

Trên hết, bạn có thể có các công việc (kiểm tra /var/spool/at/*), anacron ( /etc/anacrontab/var/spool/anacron/*) và có lẽ những người khác tôi đang quên.


4
Cảm ơn, tôi tìm thấy chúng trong /etc/cron.daily. Làm thế nào để dailytập tin đó làm việc? Thời gian nào công việc hàng ngày sẽ chạy? Trên máy của tôi, họ dường như chạy vào khoảng giữa trưa, nhưng tôi muốn nói với sysadmin của tôi cách thay đổi điều đó thành nửa đêm thay thế.
Frank

5
cron.d Daily được gọi từ /etc/crontab, ví dụ trên hệ thống Ubuntu của tôi, đó là: 25 6 * * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )có nghĩa là 6:25 sáng.
Cửu Long

cron.d Daily cũng được gọi từ / etc / crontab trên hệ thống RHEL5 của tôi, nếu bạn muốn có nhiều điểm dữ liệu hơn.
jsbillings

Trên Fedora mới hơn (và có lẽ là RHEL6 - chưa nhìn), croniedaemon sẽ chăm sóc những người sử dụng cấu hình trong /etc/anacrontab.
mattdm

Đôi khi nó /var/croncũng vậy.
CMCDragonkai

135

Với hầu hết các Crons (ví dụ: Vixie-Cron - Debian / Ubuntu, Cronie - Fedora default, Solaris Cron ...), bạn có được danh sách các công việc cron được lên lịch cho người dùng hiện tại thông qua:

$ crontab -l

hoặc cho người dùng khác thông qua

# crontab -l -u juser

Để có được crontabs cho tất cả người dùng, bạn có thể lặp qua tất cả người dùng và gọi lệnh này.

Ngoài ra, bạn có thể tra cứu các tập tin spool. Thông thường, chúng được lưu dưới /var/spool/cron, ví dụ cho thư mục vcron sau

/var/spool/cron/crontabs

chứa tất cả các crontab được cấu hình của tất cả người dùng - ngoại trừ người dùng root, người cũng có thể định cấu hình các công việc thông qua crontab trên toàn hệ thống, được đặt tại

/etc/crontab

Với cronie (mặc định trên Fedora / CentOS), cũng có một .dthư mục cấu hình kiểu cho các công việc cron hệ thống:

/etc/cron.d

(Như mọi khi, .dthư mục đơn giản hóa việc duy trì các mục cấu hình là một phần của các gói khác nhau.)

Để thuận tiện, hầu hết các bản phân phối cũng cung cấp một thư mục trong đó các tập lệnh được liên kết / lưu trữ được thực hiện định kỳ, ví dụ:

/etc/cron.daily
/etc/cron.hourly
/etc/cron.monthly
/etc/cron.weekly

Việc thực thi kịp thời các tập lệnh này thường được quản lý thông qua run-partscác mục trong crontab của hệ thống hoặc qua anacron .

Với Systemd (ví dụ trên Fedora, CentOS 7, ...) việc thực hiện công việc định kỳ có thể được cấu hình thêm thông qua các đơn vị hẹn giờ . Bộ hẹn giờ hệ thống được kích hoạt có thể được hiển thị thông qua:

$ systemctl list-timers

Lưu ý rằng người dùng bên cạnh root cũng có thể có các phiên bản systemd người dùng đang chạy trong đó bộ định thời được cấu hình. Ví dụ: trên Fedora, theo mặc định, một phiên bản systemd người dùng được bắt đầu cho mỗi người dùng hiện đang đăng nhập. Họ có thể được nhận ra qua:

$ ps aux | grep 'systemd[ ]--user'

Những bộ định thời người dùng có thể được liệt kê qua:

$ systemctl --user list-timers

Một cách khác để ban hành list-timerslệnh là tìm kiếm các tệp đơn vị hẹn giờ (mẫu *.timer:) và các liên kết tượng trưng đến chúng trong các thư mục cấu hình hệ thống và người dùng thông thường:

$ find /usr/lib/systemd/ /etc/systemd -name '*.timer'
$ find /home '(' -path '/home/*/.local/share/systemd/user/*' \
              -o -path '/home/*/.config/systemd/*' ')' \
      -name '*.timer'  2> /dev/null

(Giống như các đơn vị dịch vụ thông thường, đơn vị hẹn giờ được bật thông qua việc tạo liên kết tượng trưng trong thư mục cấu hình systemd bên phải.)

Xem thêm:


Tôi đã không downvote. Nhưng tôi chỉ thử crontab -l -u root(vì những cronjobs mà tôi muốn biết về việc chạy theo root) và nó nói rằng tôi không có đặc quyền để sử dụng -u.
Frank

3
Sau đó, bạn phải gọi nó với đủ đặc quyền - tức là rootngười dùng.
maxschlepzig

2
Vẫn chưa hoàn tất - một số phiên bản của cron chạy các công việc từ /etc/cron.d và /etc/cron. Đũad Daily
mattdm

2
@maxschlepzig - nhưng không phải lúc nào cũng vậy. Và câu hỏi là "làm thế nào tôi có thể có được một danh sách tất cả các công việc định kỳ"; một câu trả lời là "tốt, đây là một số trong số họ" không phải là câu trả lời.
mattdm

1
@maxschlepzig - cronie, như được vận chuyển trong Fedora và RHEL6, không đề cập đến những người trong /etc/crontab, mà thay vào đó sử dụng /etc/anacrontab. Tôi có thể nhầm lẫn về bất kỳ triển khai thực tế nào không đề cập đến những điều này trong bất kỳ tệp cấu hình nào. (Nhưng sau đó, tôi cũng không downvote .... Tôi chỉ nói thôi.)
mattdm

5

Để liệt kê tất cả các crons cho người dùng nhất định.

tên người dùng crontab -u;

Để liệt kê tất cả các crons cho tất cả người dùng

Chạy nó như một siêu người dùng

#!/bin/bash
#List all cron jobs for all users
for user in `cat /etc/passwd | cut -d":" -f1`;
do 
crontab -l -u $user;
done

1
OP đang yêu cầu một danh sách tất cả các công việc định kỳ.
Drav Sloan

1
Vì một số lý do không hiển thị /etc/cron.d/ công việc.
jamshid

Nó không hoạt động. "không có crontab cho dữ liệu www". nhưng tên người dùng dữ liệu www đang tồn tại.
mishanon
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.