Tôi đã nghe nói crontab là một lựa chọn tốt, nhưng làm thế nào để tôi viết dòng và tôi đặt nó ở đâu trên máy chủ?
Tôi đã nghe nói crontab là một lựa chọn tốt, nhưng làm thế nào để tôi viết dòng và tôi đặt nó ở đâu trên máy chủ?
Câu trả lời:
Đây là một hướng dẫn tốt về crontab là gì và cách sử dụng nó trên Ubuntu. Dòng crontab của bạn sẽ trông giống như thế này:
00 00 * * * ruby path/to/your/script.rb
( 00 00
biểu thị nửa đêm - 0 phút và 0 giờ - và *
nghĩa của mỗi ngày mỗi tháng.)
Cú pháp: mm hh dd lệnh mt wd mm phút 0-59 hh giờ 0-23 ngày dd tháng 1-31 tháng 1-12 ngày wd của tuần 0-7 (Chủ nhật = 0 hoặc 7) lệnh: những gì bạn muốn chạy tất cả các giá trị số có thể được thay thế bằng * có nghĩa là tất cả
/etc/crontab
(trên Ubuntu), nhưng khi bạn chạy, crontab -e
bạn đang chỉnh sửa một crontab dành riêng cho người dùng, không cho phép cột này. Ubuntu IIRC không khuyến khích thoát /etc/crontab
bằng tay vì nó có thể bị ghi đè. Xem tại đây: stackoverflow.com/questions/8475694/ Mạnh
sudo crotab -u root -e
từ trang người đàn ông
linux$ man -S 5 crontab
cron(8) examines cron entries once every minute.
The time and date fields are:
field allowed values
----- --------------
minute 0-59
hour 0-23
day of month 1-31
month 1-12 (or names, see below)
day of week 0-7 (0 or 7 is Sun, or use names)
...
# run five minutes after midnight, every day
5 0 * * * $HOME/bin/daily.job >> $HOME/tmp/out 2>&1
...
Thật tốt khi lưu ý các "biệt danh" đặc biệt có thể được sử dụng (được ghi lại trong trang hướng dẫn), đặc biệt là "@reboot" không có thời gian và ngày thay thế.
# Run once after reboot.
@reboot /usr/local/sbin/run_only_once_after_reboot.sh
Bạn cũng có thể sử dụng thủ thuật này để chạy công việc định kỳ của mình nhiều lần trong một phút.
# Run every minute at 0, 20, and 40 second intervals
* * * * * sleep 00; /usr/local/sbin/run_3times_per_minute.sh
* * * * * sleep 20; /usr/local/sbin/run_3times_per_minute.sh
* * * * * sleep 40; /usr/local/sbin/run_3times_per_minute.sh
Để thêm một công việc định kỳ, bạn có thể thực hiện một trong ba điều sau:
thêm một lệnh vào crontab của người dùng, như được hiển thị ở trên (và từ crontab, phần 5, trang man).
crontab -e -u <username>
crontab -e
EDITOR
biến môi trường
env EDITOR=nano crontab -e -u <username>
export EDITOR=vim
crontab -e
chmod a+x <file>
tạo một kịch bản / chương trình như một công việc định kỳ và thêm nó vào các /etc/cron.*ly
thư mục anacron của hệ thống
chmod a+x /etc/cron.daily/script_runs_daily.sh
- làm cho nó thực thiman anacron
chmod a+x <file>
/etc/crontab
hoặc /etc/anacrontab
để chạy tại một thời điểm đã đặt/etc/anacrontab
và xác định cron.hourly in/etc/cron.d/0hourly
Hoặc, Người ta có thể tạo hệ thống crontables trong /etc/cron.d
.
/etc/cron.d
không cần phải được thực thi.someuser
và việc sử dụng /bin/bash
như shell là bắt buộc. File: /etc/cron.d/myapp-cron
# use /bin/bash to run commands, no matter what /etc/passwd says
SHELL=/bin/bash
# Execute a nightly (11:00pm) cron job to scrub application records
00 23 * * * someuser /opt/myapp/bin/scrubrecords.php
Đôi khi, bạn sẽ cần chỉ định PATH và GEM_PATH bằng crontab với rvm.
Như thế này:
# top of crontab file
PATH=/home/user_name/.rvm/gems/ruby-2.2.0/bin:/home/user_name/.rvm/gems/ruby-2.2.0@global/bin:/home/user_name/.rvm/rubies/ruby-2.2.$
GEM_PATH=/home/user_name/.rvm/gems/ruby-2.2.0:/home/user_name/.rvm/gems/ruby-2.2.0@global
# jobs
00 00 * * * ruby path/to/your/script.rb
00 */4 * * * ruby path/to/your/script2.rb
00 8,12,22 * * * ruby path/to/your/script3.rb
Hướng dẫn nhanh để thiết lập công việc định kỳ
Tạo một tệp văn bản mới, ví dụ: mycronjobs.txt
Đối với mỗi công việc hàng ngày (00:00, 03:45), hãy lưu các dòng lịch biểu trong mycronjobs.txt
00 00 * * * ruby path/to/your/script.rb
45 03 * * * path/to/your/script2.sh
Gửi công việc tới cron (mỗi khi bạn chạy cái này, cron sẽ xóa những gì đã được lưu trữ và cập nhật với thông tin mới trong mycronjobs.txt )
crontab mycronjobs.txt
Thêm thông tin hữu ích
Xem công việc định kỳ hiện tại
crontab -l
Xóa tất cả các công việc định kỳ
crontab -r
Bạn có thể thực thi tập lệnh shell theo hai cách, bằng cách sử dụng cron job hoặc bằng cách viết tập lệnh shell
Giả sử tên tập lệnh của bạn là "minecript.sh"
Đầu tiên kiểm tra sự cho phép của người dùng của tập lệnh. sử dụng lệnh dưới đây để kiểm tra sự cho phép của người dùng của tập lệnh
sẽ script.sh
Nếu đoạn script nằm trong root, thì hãy sử dụng lệnh bên dưới
sudo crontab -e
Thứ hai nếu tập lệnh giữ người dùng "ubfox", sau đó sử dụng lệnh bên dưới
crontab -e
Thêm dòng sau vào crontab của bạn: -
55 23 * * * /path/to/yourscript.sh
Một cách khác để làm điều này là viết một kịch bản và chạy nó trong backgroud
Đây là kịch bản mà bạn phải đặt tên tập lệnh của mình (ví dụ: - youscript.sh) sẽ chạy vào lúc 23:55 tối mỗi ngày
#!/bin/bash
while true
do
/home/modassir/yourscript.sh
sleep 1d
done
lưu nó trong một tập tin (cho phép đặt tên là "every-day.sh")
ngủ 1ngày - có nghĩa là nó đợi một ngày rồi nó lại chạy.
bây giờ cấp quyền cho tập lệnh của bạn. Sử dụng lệnh bên dưới: -
chmod + x every-day.sh
bây giờ, thực thi tập lệnh shell này trong nền bằng cách sử dụng "nohup". Điều này sẽ tiếp tục thực thi tập lệnh ngay cả sau khi bạn đăng xuất khỏi phiên của mình.
sử dụng lệnh dưới đây để thực thi kịch bản.
nohup ./every-day.sh &
Lưu ý: - để chạy "minecript.sh" lúc 23:55 tối hàng ngày, bạn phải thực thi tập lệnh "every-day.sh" vào đúng 23:55 tối.