Lucaine xuất bản một lúc trước đó hướng dẫn tuyệt vời về cron và crontab mà tôi nghĩ là đáng chia sẻ. Cron là một loại tương đương với Nhiệm vụ đã lên lịch trong Windows, chỉ là nó được xử lý từ thiết bị đầu cuối. Những người thích giao diện trực quan để đạt được cùng mục tiêu, có thể xem điều này một mặt hàng khác. |
Cron là gì?
Cái tên cron xuất phát từ tiếng Hy Lạp chronos có nghĩa là "thời gian". Trong hệ điều hành Unix, cron là một trình quản lý quy trình nền thông thường (daemon) chạy các tiến trình hoặc tập lệnh theo các khoảng thời gian đều đặn (ví dụ: mỗi phút, ngày, tuần hoặc tháng). Các quy trình phải được thực thi và thời gian chúng phải được thực thi được chỉ định trong tệp crontab.
Como funciona
Daemon cron bắt đầu từ /etc/rc.d/ o /etc/init.d tùy thuộc vào sự phân bố. Cron chạy trong nền, kiểm tra bảng tác vụ crontab mỗi phút / etc / crontab o en / var / spool / cron để tìm kiếm các nhiệm vụ cần hoàn thành. Với tư cách là người dùng, chúng ta có thể thêm lệnh hoặc tập lệnh với các tác vụ vào cron để tự động hóa một số quy trình. Điều này rất hữu ích, chẳng hạn để tự động cập nhật hệ thống hoặc hệ thống sao lưu tốt.
Crontab là gì?
Crontab là một tệp văn bản đơn giản lưu trữ danh sách các lệnh sẽ được thực hiện tại một thời điểm do người dùng chỉ định. Crontab sẽ kiểm tra ngày và giờ khi tập lệnh hoặc lệnh sẽ được thực thi, các quyền thực thi và nó sẽ thực hiện nó ở chế độ nền. Mỗi người dùng có thể có tệp crontab của riêng họ, trên thực tế, / etc / crontab nó được giả định là tệp crontab của người dùng root, khi người dùng bình thường (và thậm chí là root) muốn tạo tệp crontab của riêng họ thì chúng tôi sẽ sử dụng lệnh crontab.
Crontab là cách dễ nhất để quản lý các tác vụ cron trên các hệ thống nhiều người dùng, với tư cách là người dùng hệ thống đơn giản hoặc người dùng root.
Sử dụng crontab
Chúng tôi đang bắt đầu với một ví dụ đơn giản.
Chúng tôi sẽ tự động cập nhật hệ thống, để loại bỏ sự phiền phức của việc "Tôi luôn phải cập nhật và tôi không thích điều đó!"
Trước hết chúng ta sẽ tạo một kịch bản. Tập lệnh này sẽ được gọi bởi cron và sẽ chứa tất cả các hướng dẫn mà chúng ta muốn nó thực hiện, do đó, cần phải kiểm tra nó trong một số trường hợp và theo một số cách trước khi đưa nó vào cron, một tập lệnh cập nhật đơn giản như sau:
#! / bin / bash #script update example #chọn bản phân phối của bạn # debian-ubuntu # apt-get update & apt-get -y upgrade #fedora #yum -y update #Arch #pacman --noconfirm -Syu
Xóa # khỏi dòng phân phối của bạn. Trong trường hợp đó là Ubuntu / Debian, nó bắt đầu bằng apt-get.
Chúng tôi lưu tập lệnh dưới dạng update.sh (ví dụ: thư mục script ở nhà của bạn). Chúng tôi thay đổi quyền thực thi của tập lệnh đã nói bằng:
chmod a + x ~ / scripts / update.sh
Chúng tôi thực thi tập lệnh một vài lần để xác minh rằng mọi thứ chạy trơn tru, chúng tôi sửa đổi những gì cần thiết (nó không được chứa lỗi, nếu không cron sẽ chỉ lặp đi lặp lại một lỗi). Bây giờ để thêm nhiệm vụ vào crontab của chúng tôi.
Thêm nhiệm vụ vào crontab
Chúng tôi thực thi phiên bản của crontab với crontab -e, trong một số phiên bản (chẳng hạn như Ubuntu), nó cung cấp cho chúng tôi tùy chọn để chọn trình soạn thảo văn bản mà chúng tôi muốn, phần còn lại chúng tôi để lại với vi. Tệp crontab sẽ trông giống như thế này.
# mh dom mon dow lệnh người dùng
trong đó:
- m tương ứng với phút kịch bản sẽ được thực thi, giá trị nằm trong khoảng từ 0 đến 59
- h thời gian chính xác, định dạng 24 giờ được xử lý, các giá trị nằm trong khoảng từ 0 đến 23, với 0 là 12 giờ đêm.
- ban cho đề cập đến ngày trong tháng, ví dụ: bạn có thể chỉ định 15 nếu bạn muốn chạy 15 ngày một lần
- dow có nghĩa là ngày trong tuần, nó có thể là số (0 đến 7, trong đó 0 và 7 là Chủ nhật) hoặc 3 chữ cái đầu tiên của ngày trong tiếng Anh: mon, tue, wed, thu, fri, sat, sun.
- người sử dụng xác định người dùng sẽ thực thi lệnh, đó có thể là người chủ hoặc một người dùng khác miễn là họ có quyền thực thi tập lệnh.
- lệnh đề cập đến lệnh hoặc đường dẫn tuyệt đối của tập lệnh để thực thi, ví dụ: /home/usuario/scripts/update.sh, nếu nó gọi một tập lệnh thì nó phải thực thi được
Để làm rõ một vài ví dụ về các tác vụ cron được giải thích:
15 10 * * * người dùng /home/user/scripts/update.sh
Nó sẽ chạy tập lệnh update.sh lúc 10:15 sáng hàng ngày
15 22 * * * người dùng /home/user/scripts/update.sh
Nó sẽ chạy tập lệnh update.sh lúc 10:15 tối hàng ngày
00 10 * * 0 root apt-get -y cập nhật Người dùng gốc
Nó sẽ chạy cập nhật vào Chủ nhật hàng tuần lúc 10:00 sáng
45 10 * * sun root apt-get -y cập nhật
Người dùng root sẽ chạy bản cập nhật vào Chủ nhật (CN) lúc 10:45 sáng
30 7 20 11 * người dùng /home/usuario/scripts/updata.sh
Vào ngày 20 tháng 7 lúc 30:XNUMX, người dùng sẽ chạy tập lệnh
30 7 11 11 sun user /home/usuario/scripts/pastel_con_velitas.sh
Vào ngày 11 tháng 7 lúc 30:XNUMX sáng và đó là Chủ nhật, người dùng sẽ ăn mừng sysadmin của mình (đó là tôi)
01 * * * * người dùng /home/usuario/scripts/molestorecordatorio.sh
Một lời nhắc nhở khó chịu mỗi phút mỗi giờ mỗi ngày (KHÔNG khuyến khích).
Chúng vẫn có thể được xử lý phạm vi đặc biệt:
30 17 * * 1,2,3,4,5
Vào 5h30 chiều các ngày từ thứ Hai đến thứ Sáu.
00 12 1,15,28 * *
Vào lúc 12 giờ trưa các ngày 28, XNUMX và XNUMX hàng tháng (lý tưởng để trả lương)
Nếu điều này gây nhầm lẫn, crontab sẽ xử lý các chuỗi đặc biệt để xác định các phạm vi này.
@reboot Chạy một lần, khi khởi động
@yearly chỉ chạy mỗi năm một lần: 0 0 1 1 *
@annual giống với @yearly
@monthly chạy mỗi tháng một lần, ngày đầu tiên: 0 0 1 * *
@weekly Weekly phút đầu tiên của giờ đầu tiên trong tuần. 0 0 * * 0 ″.
@daily hàng ngày, lúc 12:00 A.M. 0 0 * * *
@midnight giống như @daily
@ giờ vào phút đầu tiên của mỗi giờ: 0 * * * *
Việc sử dụng nó rất đơn giản.
@hourly user /home/user/scripts/molestorecordatorio.sh @monthly user /home/user/scripts/backup.sh @daily root apt-get update && apt-get -y nâng cấp
Cuối cùng nhưng không kém phần quan trọng:
Quản lý công việc Cron
tệp crontab
Thay thế tệp crontab hiện có bằng tệp do người dùng xác định
-e crontab
Chỉnh sửa tệp crontab của người dùng, mỗi dòng mới sẽ là một tác vụ crontab mới.
crontab -l
Liệt kê tất cả các tác vụ crontab của người dùng
crontab -d
Xóa crontab của người dùng
thư mục crontab -c
Xác định thư mục crontab của người dùng (thư mục này phải có quyền ghi và thực thi của người dùng)
người dùng crontab -u
tiền tố để xử lý crontab của người dùng khác, ví dụ:
$ sudo crontab -l -u root $ sudo crontab -e user2 #crontab -d -u user
Công cụ này, giống như nhiều công cụ khác, có thể được nhìn thấy sâu hơn và chi tiết hơn trong:
Ugh… hơi khó hiểu.
* / 30 bị thiếu (trong trường phút) chạy cứ sau 30 phút ...
Chỉ điều này tôi sẽ nhận xét cho đến khi tôi quyết định xem xét các ý kiến 😀
Bổ ngữ này là một phần thông tin rất quan trọng và một cái gì đó rất hữu ích.
Hello!
Hiện tại, tôi đang kiểm tra cấu hình cứ sau 45 phút.
* / 45 * * * *, và lệnh được thực hiện vào 45 phút mỗi giờ VÀ mỗi giờ. Điều đó có nghĩa là:
Nó chạy lúc 3:45, sau đó 4:00, 4:45, sau đó 5:00, 5:45, 6:00, 6:45, v.v.
Tôi có điều gì không ổn? Tôi có thể làm gì để chỉ có 45 phút một lần, hoặc ít nhất một lần vào 45 phút mỗi giờ.
Hello!
Hiện tại, tôi đang kiểm tra cấu hình cứ sau 45 phút.
* / 45 * * * *, và lệnh được thực hiện vào 45 phút mỗi giờ VÀ mỗi giờ. Điều đó có nghĩa là:
Nó chạy lúc 3:45, sau đó 4:00, 4:45, sau đó 5:00, 5:45, 6:00, 6:45, v.v.
Tôi có điều gì không ổn? Tôi có thể làm gì để chỉ có 45 phút một lần, hoặc ít nhất một lần vào 45 phút mỗi giờ.
Xin chào thông tin siêu hữu ích để làm rõ cách hoạt động của cron.
Bytes
cho *
Tuyệt vời, cảm ơn vì đã làm rõ cách hoạt động của cron .. hãy chung tay một chút 🙂
Theo tôi hiểu, dòng này sẽ được thực thi lúc 10:15 tối, hãy sửa cho tôi nếu tôi sai
Vâng, nó nói 10:15 sáng
15 22 * * * người dùng /home/user/scripts/update.sh
Xin chào! thông tin rất tốt.
Để thực thi một Script cứ sau nửa giờ, dòng sẽ được thêm vào CronTab sẽ là: "30 * * * * root Scrip.sh" Đúng không? Cảm ơn bạn rất nhiều!
Không. Nếu tôi nhớ không nhầm, bạn phải đặt / 30 * * * * root Scrip.sh.
Đó là, thêm / trước 30.
Chúc mừng! Paul.
Xin chào, tôi thích bài viết của bạn, nó rất hoàn chỉnh nhưng tôi muốn hỏi bạn một điều.
Tôi đang gặp sự cố với lệnh này và một lệnh như "at".
Tôi muốn chạy một tập lệnh vào một thời điểm nhất định và đặt
ví dụ tại -f /home/mi_user/Desk/script.sh 18:08
và tập lệnh không được thực thi trên màn hình.
Và với cron, điều tương tự cũng xảy ra với tôi, tôi chỉnh sửa tệp crontab bằng "crontab -e"
ở cuối tôi thêm dòng này:
46 19 my_user /home/mi_user/Desk/script.sh
và nó không làm gì cả, nó không hiển thị script.
Bất kì lời đề nghị nào? Cảm ơn bạn rất nhiều và xin lỗi vì bất kỳ sự bất tiện nào
Để thiết bị đầu cuối xuất hiện, bạn có thể phải chạy thiết bị đầu cuối và chuyển tập lệnh làm tham số.
Ví dụ:
lxterminal -e "my_user /home/my_user/Desk/script.sh"
Tham số sử dụng có thể khác nhau dựa trên trình giả lập đầu cuối mà bạn sử dụng.
Tôi hy vọng nó hoạt động.
Ôm! Paul.
Sự đóng góp được đánh giá cao.
10 điểm !!
xin chào2!!
Cảm ơn bạn rất nhiều, nó đã giúp tôi rất nhiều để làm sáng tỏ một số điều, cảm ơn tổng thể, để biết thêm chi tiết hoặc nghi ngờ tôi sẽ đến TRANG MAN, nhắc lại lời chào.
người đàn ông cảm ơn bạn rất nhiều, tôi đã đọc và thử nghiệm các ví dụ. cảm ơn bạn rất nhiều ... nó rất dễ hiểu. Chúc mừng
Tôi đã sử dụng ubuntu Server 12.04.2 LTS và phiên bản crontab mà tôi có, để xóa danh sách công việc của người dùng được sử dụng, crontab -r (và -l, như hướng dẫn sử dụng này cho biết). Chắc chắn đó là câu hỏi của các phiên bản.
Mặt khác, tôi đã từng chỉ chạy crontab và loại này cho phép tôi tạo tệp thực thi của riêng mình, nhưng đây không phải là tệp đang được thực thi. Cái chạy là cái trong / etc / crontab. có thể ai đó sẽ sử dụng bình luận.
PS (Tôi đã tìm kiếm với định vị và whereis crontab nhưng nó chỉ trả về địa chỉ nói trên và một tệp khác được mã hóa, vì vậy nếu tệp được thực thi là tệp trong / etc / crontab, nhưng khi thực hiện lệnh crontab -e, tệp của tôi đã xuất hiện với tất cả các công việc mà tôi đã xác định) tệp này được lưu trữ ở đâu '???? Trân trọng. Tôi luôn đăng nhập bằng root.
Tuyệt vời, rất hữu ích !!!
Xin chào, tôi muốn thực hiện việc này ………… «15 10 * * * root ifdown eth0»
có nghĩa là tại một thời điểm nhất định card mạng bị tắt ………… tốt, tôi đặt nó vào crontab và nó không hoạt động …… .. sao vậy?
Saludos y gracias
Bạn đã bỏ lỡ xác định "mon" sau tiêu đề "Thêm nhiệm vụ vào crontab"
Bài viết vẫn hay, cron cực kỳ hữu ích.
Bài viết hay đó thú vị làm sao, hãy hỏi tôi
Nếu tôi muốn theo dõi các hồ sơ để lại trong quá trình thực thi các nhiệm vụ, tôi có thể xem nó ở đâu?
là decdir Tôi muốn xem lịch sử của các hành động đã thực hiện trong quá khứ của tệp này và tôi muốn xem ai đã sửa đổi nó và ngày
cảm ơn
Tôi muốn kiểm tra lịch sử sửa đổi của cái này
tôi làm nó như thế nào
cảm ơn
Chào buổi sáng,
Tôi nghĩ rằng trong tập lệnh ubuntu bạn đã mắc lỗi, bạn đã đặt nâng cấp ap-get -y thay vì nâng cấp apt-get -y. (Bạn đã để lại một t).
Một lời chào.
Cũng vậy. Cảm ơn bạn!
Ôm! Paul
Tôi muốn biết cách tạo tệp cron để có thể chỉ định thời gian mỗi khi nó được thực thi, thư mục, v.v.
Cảm ơn bạn đã làm rõ hoạt động và các lệnh cơ bản cho cron, bây giờ để giải trí một chút.
Bất cứ khi nào tôi tìm kiếm thông tin về bất kỳ chủ đề nào liên quan đến Gnu / Linux, tôi đều đi vòng vo và cuối cùng tôi luôn tìm thấy trong 90% trường hợp hướng dẫn tốt nhất trong cộng đồng tuyệt vời này, tôi nghĩ rằng từ bây giờ tôi sẽ bắt đầu ở đây và sau đó ở nơi khác .
Liên quan
Cảm ơn Sander! Một cái ôm! Paul.
dom = ngày trong tháng
dow = ngày trong tuần
nó dễ dàng hơn nếu bạn liên kết
Cảm ơn bạn rất nhiều, điều này rất đầy đủ và giải thích tốt.
Đây cũng chính là cái mà cô giáo OS của mình đã giao cho bọn mình, mình không thay đổi gì hết, giờ thấy lớp sao mà tệ quá .-. À, cái này cũng giống bài tập xD
Ước lượng,
Truy vấn, thời lượng của một nhiệm vụ có thể bị giới hạn không?
Ví dụ: tôi có một nhiệm vụ được lặp lại sau mỗi 5 phút, khi lặp lại nếu tác vụ này vẫn hoạt động, hãy tắt nó và chạy lại.
Cảm ơn bạn,
Marcello.-
Xin chào, Marcelo!
Tôi nghĩ sẽ tốt hơn nếu bạn nêu câu hỏi này trong dịch vụ hỏi đáp của chúng tôi có tên Xin DesdeLinux để cả cộng đồng có thể giúp bạn giải quyết vấn đề của mình.
Một cái ôm, Pablo.
bài tốt.
Lệnh cho mỗi thiết bị đầu cuối là gì để thêm tác vụ vào crontab (mà không cần nhập crontab và thêm chúng theo cách thủ công bằng 'crontab -e' hoặc thay thế crontab bằng crontab khác bằng 'tệp crontab').
Ý tưởng là tạo một tập lệnh bên ngoài để thêm các tác vụ vào crontab
Cảm ơn
đối với tôi dường như bạn có thể sử dụng 'echo' bất cứ thứ gì bạn muốn thêm '| cat >> 'cronotab path (/ etc / cronotab)' «
Làm thế nào để một biểu thức chạy chính xác 3 ngày một lần
Hey.
Tôi gặp sự cố khi thực hiện công việc cron.
Tôi chạy tác vụ sau với cronta -e:
01 * * * * root /home/user/script/mfile.sh
nhưng nhiệm vụ không được thực hiện. Tôi đã xác minh rằng myfile.sh có quyền thực thi và người dùng thực thi nó là root.
Tôi chạy tác vụ tương tự trong / etc / crontab và sau khi khởi động lại dịch vụ, nó cũng không hoạt động với tôi.
Nội dung của myfile.sh là một lệnh cập nhật DB và nếu tôi chạy nó trong bảng điều khiển thì nó sẽ hoạt động.
bất kỳ ý tưởng vấn đề có thể là gì?
Người dùng cơ sở dữ liệu có thể không có tất cả các quyền và trước tiên bạn sẽ phải xuất các biến môi trường từ công cụ cơ sở dữ liệu của mình.
Ví dụ trong db2 dòng này sẽ đi đến phần đầu của script
. / home / db2inst1 / sqllib / db2profile
Một nguyên nhân khác có thể là do tập lệnh yêu cầu kết nối với cơ sở dữ liệu, hãy thực hiện kết nối với cơ sở dữ liệu trong tập lệnh
Tôi không biết rằng tôi phải khởi động lại crond, tôi đã chiến đấu với điều này trong một thời gian
Họ sẽ biết làm thế nào để chỉ ra rằng nhiệm vụ được thực hiện vào mỗi cuối tháng, vào thời gian được chỉ định .. chi tiết là tôi không thể đạt được làm thế nào tôi biết rằng phải mất ngày cuối cùng của mỗi tháng .. ?? Tôi đã phải viết chúng ra từng cái một nhưng khi đến cuối tháng Hai, điều đó thật khó hiểu vì điều đó thật phức tạp đối với tôi ..
ngày tốt!!
Làm cách nào để dừng quá trình đang được thực thi trong crontab?
quá trình * …………
Có thể là bạn có thể giúp tôi? eu tenho um script của tác giả minha mà không hoạt động không có crontab! Jб dei tất cả các quyền, không một cron hoặc người dùng cụ thể có thể thực thi nó-hầu hết không có gì xảy ra! Tôi muốn biết nếu bạn có thể giúp tôi, một số việc khác không hiệu quả! Vlws
Bạn sẽ đặt một nhiệm vụ như thế nào để chạy vào mỗi ngày cuối cùng của tháng (ngày: 31-30-28)?
Như bạn đã biết, lệnh su được sử dụng để thay đổi người dùng trong bảng điều khiển. Nếu tôi sử dụng lệnh su như vậy: "your user" thay đổi người dùng nhưng không có cài đặt phù hợp của "người dùng", nếu tôi chạy su với tư cách: "su - user", hãy thay đổi người dùng bằng cách tải cài đặt người dùng. Với cron, tôi chỉ ra người dùng, nhưng làm cách nào để tải cấu hình của người dùng này?
Và nếu tôi muốn dừng nó lại?
Xin chào,
Tôi không biết mình đang làm gì sai, nhưng tôi làm theo các bước và không có gì được thực hiện. Tôi đã thử:
59 * * * * / usr / bin / gedit
* * * * * / usr / bin / gedit
* * * * * root / usr / bin / gedit
* * * * * usr / bin / test.sh
* * * * * root usr / bin / test.sh
và không có gì cả. Nó không thực thi bất cứ điều gì. Tôi đã khởi động lại và mọi thứ.
cảm ơn bạn rất nhiều