ฉันพูดได้ไหม:
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 หรือไม่?