ฉันพูดได้ไหม:
MYPATH=/root/scripts
MYSCRIPT=doit.sh
0 1 * * * $MYPATH/$MYSCRIPT
ในcrontab -e
?
เป็นไปได้ไหมที่จะใช้ตัวแปรcrontab -e
?
ฉันพูดได้ไหม:
MYPATH=/root/scripts
MYSCRIPT=doit.sh
0 1 * * * $MYPATH/$MYSCRIPT
ในcrontab -e
?
เป็นไปได้ไหมที่จะใช้ตัวแปรcrontab -e
?
คำตอบ:
ใช่คุณสามารถกำหนดและใช้ตัวแปรด้วยวิธีนี้ มีข้อ จำกัด (ซึ่งคุณยังไม่ได้ตีในตัวอย่างของคุณ): สตริงทางด้านขวาของ=
เครื่องหมายถูกตีความอย่างแท้จริงโดยนำการเว้นวรรคชั้นนำออกดังนั้นคุณจะไม่สามารถใช้โครงสร้างเช่นFOO=$BAR/qux
(เช่นPATH=$HOME/bin:$PATH
ไม่มีประโยชน์ใด ๆ )
นี่คือที่ระบุไว้ในเอกสารซึ่งคุณสามารถดูได้โดยการทำงาน
man 5 crontab
(หมายเหตุที่man crontab
แสดงเอกสารของcrontab
คำสั่งในส่วนที่ 1 ของคู่มือคุณต้องการเอกสารประกอบของcrontab
รูปแบบไฟล์ในส่วนที่ 5)
เพิ่งลองทำใช่มันเป็นไปได้ คุณสามารถหาตัวอย่างง่ายๆได้จากนี้crontab
:
FOO = QWERTY * * * * * echo $ FOO> ~ / out
และตรวจสอบไฟล์~/out
(ปรับปรุงทุกนาที) "qwerty"
ก็ควรมี
ในขณะที่ 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
ข้างต้น
ไม่คุณไม่สามารถ cronjob ได้เพียง แต่มีรายการ cron เท่านั้น ไม่ใช่ตัวเลือกในการสร้าง bash-script และรัน bash-script ผ่าน cronjob หรือไม่?