Có thể sử dụng các biến trong crontab -e?


13

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:


15

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:$PATHsẽ 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 crontabhiể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.)


7

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".


2
+1 để chỉ ra cách OP có thể tự mình tìm ra những thứ tương tự.
Arthaey

Một ví dụ tốt hơn sẽ sử dụng $ FOO bên trong tập lệnh đích.
Acumenus

4

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 -choặc trình bao được xác định SHELLtrê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/shlà bình thường /bin/bashnê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/shchỉ 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\%mtrên.


-2

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?


1
Đúng trên một số thông báo khác, nhưng cron của Linux không hỗ trợ gán biến môi trường.
Gilles 'SO- ngừng trở nên xấu xa'
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.