Tôi có thể nói không:
MYPATH=/root/scripts
MYSCRIPT=doit.sh
0 1 * * * $MYPATH/$MYSCRIPT
trong crontab -e
?
Có thể sử dụng các biến trong crontab -e
?
Tôi có thể nói không:
MYPATH=/root/scripts
MYSCRIPT=doit.sh
0 1 * * * $MYPATH/$MYSCRIPT
trong crontab -e
?
Có thể sử dụng các biến trong crontab -e
?
Câu trả lời:
Có, bạn có thể định nghĩa và sử dụng các biến theo cách này. Có một hạn chế (mà bạn chưa đạt được trong các ví dụ của mình): chuỗi bên phải của =
dấu hiệu được hiểu theo nghĩa đen, với các khoảng trắng ở đầu bị xóa, vì vậy bạn không thể sử dụng các cấu trúc như FOO=$BAR/qux
(ví dụ: PATH=$HOME/bin:$PATH
sẽ không làm gì hữu ích).
Điều này được nêu trong tài liệu, mà bạn có thể thấy bằng cách chạy
man 5 crontab
(Lưu ý rằng man crontab
hiển thị tài liệu của crontab
lệnh , trong phần 1 của hướng dẫn; bạn muốn tài liệu có crontab
định dạng tệp , trong phần 5.)
Chỉ cần thử, có, nó có thể. Bạn có thể tìm ra nó với ví dụ đơn giản này, hãy đặt nó trong crontab
:
FOO = qwerty * * * * * echo $ FOO> ~ / out
Và kiểm tra tệp ~/out
(cập nhật mỗi phút), nó sẽ chứa "qwerty"
.
Mặc dù crontabs của Linux hỗ trợ xác định một số biến chứa giá trị bằng chữ, nhưng nó không được sử dụng nhiều ngoài việc cô đọng văn bản dài thành biểu diễn ngắn hơn hoặc kiểm soát một số thứ về chính cron, chẳng hạn như nơi gửi đầu ra email.
Tính linh hoạt là hiểu rằng phần lệnh của mục nhập cron sẽ được chuyển đến /bin/sh -c
hoặc trình bao được xác định SHELL
trên các hệ thống sử dụng Vixie cron (phần thường được cài đặt trên các hệ thống Linux). Điều này có nghĩa là phần còn lại của dòng lệnh là một tập lệnh shell đơn giản. LƯU Ý: nhận ra vỏ nào đang được sử dụng. Trên Linux /bin/sh
là bình thường /bin/bash
nên $( ... )
lệnh nhúng hoạt động, nhưng nó sẽ không hoạt động trên các hệ thống cũ, nơi /bin/sh
chỉ hiểu `
thay thế.
Ví dụ: tôi có một dòng crontab đơn giản lưu trữ tệp MBX của các tin nhắn đã lưu hàng tháng và nén nó. Nó trông như thế này:
15 0 1 * * nf=MailFeed-$( date +\%Y\%m ).mbx && cd Logs && mv MailFeed.mbx $nf && bzip2 -9 $nf
Điều này sẽ chạy đầu tiên mỗi tháng vào lúc 12:15 sáng, đặt tên tệp mới có CCYYMM trong đó, di chuyển tệp hiện tại sang tên mới và nén nó. Điều cần nhớ là một dấu ngoặc kép %
(dấu phần trăm) sẽ được coi là một dòng mới và dữ liệu theo sau nó sẽ được gửi dưới dạng stdin để ra lệnh trước dấu phần trăm. Đó là lý do tại sao bình thường date +Y+m
được viết như date +\%Y\%m
trên.
Không, bạn không thể một cronjob chỉ có thể chứa các mặt hàng cron. Nó không phải là một tùy chọn để tạo bash-script và chạy bash-script thông qua một cronjob?