Cách chính xác để chỉnh sửa một tập tin crontab là gì?


52

Tôi đang cố gắng tự động hóa việc làm mới awstats cho máy chủ web của mình và hiểu rằng tôi cần sử dụng cron để thiết lập nó. Vậy mỗi người dùng có một tập tin crontab?

Tôi đã làm theo hướng dẫn tại đây cộng đồng / AWStats

Và nó nói để đi đến tập tin tại: /etc/crontab

Tập tin đó đã có một số thông tin trong đó. Đây là crontabtập tin chính hay cái gì đó? Tôi đã thấy một số hướng dẫn trực tuyến để sử dụng tệp bật lên crontab -e.

Các tập tin thích hợp để sử dụng và cách tốt nhất để làm điều này là gì?

Nếu tôi lên lịch một tác vụ với tư cách là người dùng không phải root của mình, nó sẽ tự chạy trong khoảng thời gian như đã chỉ định, không có vấn đề gì phải không?

Tôi có cần khởi động lại máy chủ sau khi lưu công việc định kỳ trong crontabtệp trước khi nó bắt đầu hoạt động không?

Câu trả lời:


50

Các tập tin thích hợp để sử dụng và cách tốt nhất để làm điều này là gì?

crontab -e là cách tốt nhất để làm điều đó - điều này sẽ cho phép bạn dễ dàng chỉnh sửa crontabs cho mỗi người dùng.

Nếu tôi lên lịch một tác vụ với tư cách là người dùng không phải root của mình, nó sẽ tự chạy trong khoảng thời gian như đã chỉ định, không có vấn đề gì phải không?

Có, và nó sẽ chạy với các đặc quyền của tài khoản người dùng đó.

Theo nguyên tắc, tốt nhất là chạy các tác vụ theo lịch trình với các đặc quyền thấp nhất bạn có thể có được, vì vậy nếu những gì bạn đang làm sẽ không yêu cầu root, đừng sử dụng root. Nếu bạn thậm chí không cần phải có khả năng truy cập của bạn tập tin và thư mục của tài khoản, sau đó bạn có thể tạo một người dùng mới và sử dụng tài khoản người dùng chỉ cho nhiệm vụ đó. Mặt khác, nếu công việc của bạn không yêu cầu root, crontab sử dụng gốc của ( su/ sudo suroot sau đó sử dụng crontab -e).

Tôi có cần khởi động lại máy chủ sau khi lưu công việc định kỳ trong tệp crontab trước khi nó bắt đầu hoạt động không?

Không, nó sẽ bắt đầu làm việc ngay lập tức (tốt, thời gian dự kiến ​​có thể tiếp theo).

Tại sao không chỉnh sửa tập tin trực tiếp? Nó được định vị ở đâu?

Các tập tin crontab của người dùng được đặt trong /var/spool/cron/crontabs, nhưng các quyền của họ được đặt theo cách mà họ không thể truy cập mà không có quyền siêu người dùng (nhưng một khi đã mở và quy trình cron sẽ bỏ các đặc quyền thì nó vẫn có thể truy cập tệp).

Hệ thống không được thiết kế cho người dùng cuối để chỉnh sửa trực tiếp các tệp này và thực sự phần trên cùng của tệp có DO NOT EDIT THIS FILEcảnh báo nghiêm khắc ở đầu hiệu ứng này. Thay vào đó, tệp được thiết kế để chỉnh sửa thông qua crontab -eđó thiết lập một bản sao tạm thời của tệp /tmpđể chỉnh sửa - mà không có cảnh báo nghiêm khắc - sau đó nó sẽ kiểm tra và cài đặt chính tệp crontab vĩnh viễn. Tất cả điều này có thể được thực hiện mà không cần sự cho phép của siêu người dùng.

Nếu bạn đã chỉnh sửa trực tiếp tệp crontab, tôi không biết kết quả sẽ như thế nào. Có thể đơn giản là nó sẽ không có hiệu lực cho đến lần khởi động lại tiếp theo và bất kỳ lỗi nào cũng có thể khó gỡ lỗi.


5
crontab -echo phép bạn chỉnh sửa crontab người dùng của bạn mà không cần sudo. Các crontabs của người dùng nằm trong /var/spool/cron/crontabsđó là một thư mục không thể truy cập được nếu không có sự cho phép của siêu người dùng (nhưng theo cách mà một khi cron bỏ đặc quyền thì nó vẫn có thể đọc được). Ngay cả khi bạn sử dụng sudo để thử và chỉnh sửa tệp trực tiếp, bạn vẫn thấy một cảnh báo lớn ở trên cùng, "KHÔNG CHỈNH SỬA NÀY" - tệp được thiết kế để được chỉnh sửa bằng crontablệnh sử dụng bản sao tạm thời /tmpvà sau đó cài đặt nó sau khi bạn tiết kiệm
thomasrutter

25

Mỗi người dùng đều có cái riêng crontab.

Để xem nó chỉ cần gõ

crontab -l

và, vâng, bạn đã thấy nó đúng, khi bạn muốn thêm crontabthì chỉ cần làm

crontab -e

lần đầu tiên bạn sẽ được hỏi về trình chỉnh sửa để sử dụng crontab. Như bạn là một người mới như bạn nói, tôi khuyên bạn nên sử dụng nano, đây là trình chỉnh sửa đơn giản nhất để sử dụng.

Bản thân crontab hoạt động như thế này

MIN =  Minute 0-60
HOUR = Hour [24-hour clock] 0-23
MDAY = Day of Month 1-31
MON = Month 1-12 OR jan,feb,mar,apr ...
DOW =  Day of Week 0-6 OR sun,mon,tue,wed,thu,fri,sat
COMMAND = Command to be run Any valid command-line

Vì vậy, ví dụ để kích hoạt công việc cứ sau 15 phút vào thứ hai, bạn làm như vậy

*/15 * * * mon /home/me/yourscript.sh

và CÓ, điều rất quan trọng là bạn đặt cronjob của mình vào crontab của người dùng có đủ quyền để thực hiện nó.

Vì vậy, nếu tập lệnh của bạn cần được root hoặc một người dùng đặc biệt, hãy đảm bảo su cho người dùng đó và thêm cronjob vào đó.

Cũng rất quan trọng!

cronjob là ngu ngốc! Có tôi đã nói nó. Luôn đảm bảo nhập PATH đầy đủ cho application/command/scriptbạn đang sử dụng, vì crontab sẽ không hoạt động với .bashrchoặc tương tự. Bạn luôn phải đảm bảo rằng bạn nói với cron nơi nó có thể tìm thấy các tệp và thư mục.

Để trả lời các câu hỏi còn lại của bạn:

Tất nhiên nó sẽ tự chạy, đó là những gì nó có. Nhưng bạn cần kiểm tra xem cronjob có thực sự làm được không, hoặc nếu nó thiếu thứ gì đó. Ví dụ, đăng nhập vào một logfile để xem nó có thực sự hoạt động không.

Và KHÔNG, khởi động lại là không cần thiết. Khởi động lại với linux thường chỉ cần thiết, nếu bạn cài đặt kernel mới. Để sử dụng, bạn cần khởi động lại. Hầu hết mọi thứ khác có thể được thực hiện mà không cần khởi động lại trong Linux. Tất nhiên có những trường hợp ngoại lệ, nhưng nói chung tuyên bố này là chính xác.


để kiểm tra xem bạn định dạng thời gian xem xét trang web này crontab.guru
ASTM
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.