เป็นไปได้ไหมที่จะใช้ตัวแปรใน crontab -e?


13

ฉันพูดได้ไหม:

MYPATH=/root/scripts  
MYSCRIPT=doit.sh

0 1 * * * $MYPATH/$MYSCRIPT

ในcrontab -e?

เป็นไปได้ไหมที่จะใช้ตัวแปรcrontab -e?

คำตอบ:


15

ใช่คุณสามารถกำหนดและใช้ตัวแปรด้วยวิธีนี้ มีข้อ จำกัด (ซึ่งคุณยังไม่ได้ตีในตัวอย่างของคุณ): สตริงทางด้านขวาของ=เครื่องหมายถูกตีความอย่างแท้จริงโดยนำการเว้นวรรคชั้นนำออกดังนั้นคุณจะไม่สามารถใช้โครงสร้างเช่นFOO=$BAR/qux(เช่นPATH=$HOME/bin:$PATHไม่มีประโยชน์ใด ๆ )

นี่คือที่ระบุไว้ในเอกสารซึ่งคุณสามารถดูได้โดยการทำงาน

man 5 crontab

(หมายเหตุที่man crontabแสดงเอกสารของcrontab คำสั่งในส่วนที่ 1 ของคู่มือคุณต้องการเอกสารประกอบของcrontab รูปแบบไฟล์ในส่วนที่ 5)


7

เพิ่งลองทำใช่มันเป็นไปได้ คุณสามารถหาตัวอย่างง่ายๆได้จากนี้crontab:

FOO = QWERTY
* * * * * echo $ FOO> ~ / out

และตรวจสอบไฟล์~/out(ปรับปรุงทุกนาที) "qwerty"ก็ควรมี


2
+1 เพื่อแสดงว่า OP สามารถหาสิ่งที่คล้ายกันด้วยตนเองได้อย่างไร
Arthaey

ตัวอย่างที่ดีกว่าจะใช้ประโยชน์จาก $ FOO ภายในสคริปต์เป้าหมาย
คิวเมนตัส

4

ในขณะที่ Linux crontabs สนับสนุนการกำหนดตัวแปรบางอย่างที่เก็บค่าตามตัวอักษรมันไม่ได้ใช้อะไรมากนอกจากการรวมข้อความยาว ๆ เข้ากับการแสดงที่สั้นลงหรือควบคุมบางสิ่งเกี่ยวกับ cron เองเช่นที่ที่จะส่งอีเมล

ความยืดหยุ่นคือการเข้าใจว่าส่วนคำสั่งของรายการ cron จะถูกส่งไปยัง/bin/sh -cหรือเชลล์ที่กำหนดด้วยSHELLบนระบบที่ใช้ Vixie cron (ส่วนที่ติดตั้งบนระบบ Linux) สิ่งนี้หมายความว่าส่วนที่เหลือของบรรทัดคำสั่งคือเชลล์สคริปต์แบบง่าย หมายเหตุ: ตระหนักถึงสิ่งที่เปลือกถูกใช้ บน Linux /bin/shเป็นปกติ/bin/bashดังนั้น$( ... )คำสั่งที่ฝังตัวทำงาน แต่มันจะไม่ได้อยู่ในระบบเก่าที่/bin/shเพียง แต่เข้าใจ`แทน

ตัวอย่างเช่นฉันมีสาย crontab ง่าย ๆ ที่เก็บไฟล์ MBX ของข้อความที่บันทึกเป็นรายเดือนและบีบอัดมัน ดูเหมือนว่านี้:

15 0 1 * *  nf=MailFeed-$( date +\%Y\%m ).mbx && cd Logs && mv MailFeed.mbx $nf && bzip2 -9 $nf

สิ่งนี้จะทำงานวันแรกของแต่ละเดือนเวลา 12:15 น. ตั้งชื่อไฟล์ใหม่ด้วย CCYYMM ในนั้นย้ายไฟล์ปัจจุบันไปที่ชื่อใหม่และบีบอัด สิ่งที่ต้องจำคือการไม่ใช้%เครื่องหมาย (เครื่องหมายเปอร์เซ็นต์) จะถือว่าเป็นบรรทัดใหม่และข้อมูลหลังจากนั้นจะถูกส่งเป็น stdin ไปยังคำสั่งก่อนหน้าเครื่องหมายเปอร์เซ็นต์ นั่นคือเหตุผลที่ปกติdate +Y+mเขียนไว้date +\%Y\%mข้างต้น


-2

ไม่คุณไม่สามารถ cronjob ได้เพียง แต่มีรายการ cron เท่านั้น ไม่ใช่ตัวเลือกในการสร้าง bash-script และรัน bash-script ผ่าน cronjob หรือไม่?


1
เป็นจริงสำหรับ Unices อื่น ๆ แต่ cron ของ Linux รองรับการกำหนดตัวแปรสภาพแวดล้อม
Gilles 'หยุดชั่วร้าย'
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.