ความยาวสูงสุดของคำสั่ง Crontab


20

มีข้อ จำกัด ของอักขระที่คำสั่งใน crontab หรือไม่?

ฉันมี crontab ที่มีคำสั่ง 178 ตัวอักษรและดูเหมือนว่าจะถูกตัดทอนที่ 164 เมื่อดำเนินการ ฉันสามารถบอกหมายเลขนี้ได้จากอีเมลที่ฉันได้รับและจากสี vi ที่เปลี่ยนไปจากจุดนั้น

ดังนั้นมันเป็นข้อ จำกัด "ทางการ" หรือไม่? ฉันหาเอกสารเกี่ยวกับเรื่องนี้ไม่พบ


อืมถ้ามันมีขีดจำกัดความยาวฉันสงสัยว่ามันจะต่ำตามที่คุณเห็น มันจะคุ้มค่าของคุณในขณะที่คุณกำลังเดินผ่านserverfault.com/questions/449651/และถ้ามันไม่ช่วยอัปเดตคำถามของคุณกับรายการ crontab ที่แท้จริง
user9517 รองรับ GoFundMonica

คุณพูดถูกความยาวไม่ใช่ปัญหา ดูคำตอบของฉัน ขอบคุณสำหรับลิงค์
Ponytech

คำตอบ:


36

ว้าวฉันพบว่าปัญหาของฉันคืออะไรและไม่มีอะไรเกี่ยวข้องกับความยาวบรรทัด

ปรากฎว่าคำสั่งของฉันมี% (เครื่องหมายเปอร์เซ็นต์) ในนั้นซึ่งมีความหมายพิเศษใน crontab ใช้เพื่อป้อนข้อความถึง STDIN (ดูทำไม crontab ของฉันไม่ทำงานและฉันจะแก้ไขปัญหาได้อย่างไร )

ดังนั้นฉันต้องหลบหนี คำสั่งของฉันซึ่งเป็น:

gzip -c /path/to/a/file > /backup/dir/file-$(date +%F_%T).gz

กลายเป็น

gzip -c /path/to/a/file > /backup/dir/file-$(date +\%F_\%T).gz

จะ ... วันที่ '+% F_% T' ไม่เพียงพอหรือไม่
jirib

ฉันเดาว่าเขากำลังทำเสียงสะท้อนเพื่อกำจัดตัวละครขึ้นบรรทัดใหม่ซึ่งวันที่นั้นจะจบลงด้วยผลลัพธ์
เอ็ด

2
ฉันสงสัยว่าทำไมการแก้ไข crontab ด้วย vim และการเน้นไวยากรณ์ทำให้คำสั่งของฉันดูมีสีสันเล็กน้อย %ตกตะลึงที่เกิดจากสองสามชั่วโมง!
geerlingguy

12

ประสบการณ์มีการตัดทอน 999 อักขระต่อบรรทัดในเครื่อง Ubuntu ทั้งหมดของฉันแม้ว่าฉันจะยังไม่พบเอกสารอธิบายที่เกี่ยวข้อง

ฉันได้ทดสอบกับ Ubuntu 10.04, 12.04 และ 14.04 แล้วและการนับตัวอักษร 999 เริ่มต้นที่ตัวละครที่ไม่ใช่ช่องว่างตัวแรกผ่านตารางเวลา (ในตัวอย่างของฉันกำหนดการคือ* * * * *ซึ่งเท่ากับ 1 ครั้งทุกนาที)

สังเกต:

  • ก่อนอื่นเราจะนับจำนวนตัวอักษรของคำสั่งที่เราจะเพิ่มใน crontab ของเรา - โดยไม่มีกำหนด :

    davidamick@myputer:~$ echo -n "/bin/echo 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa' > /tmp/test.log" | wc -c
    999
    davidamick@myputer:~$
    
  • เพิ่มคำสั่งนั้นใน crontab ของเราเพื่อเรียกใช้ทุกนาที: (คำเตือนนี้จะเขียนทับรายการ crontab ใด ๆ ที่มีอยู่สำหรับผู้ใช้ที่เกี่ยวข้อง)

    davidamick@myputer:~$ echo "* * * * * /bin/echo 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa' > /tmp/test.log" | crontab -
    davidamick@myputer:~$
    
  • รอหนึ่งนาทีตรวจสอบว่า/tmp/test.logไฟล์ถูกสร้างขึ้นซึ่งมี "a" ของคุณทั้งหมด:

    davidamick@myputer:~$ cat /tmp/test.log
    aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
    davidamick@myputer:~$
    
  • เริ่มต้นใหม่ลบ crontab และล็อกไฟล์:

    davidamick@myputer:~$ crontab -r
    davidamick@myputer:~$ rm /tmp/test.log
    davidamick@myputer:~$
    
  • เพิ่มคำสั่งเดียวกับก่อนหน้านี้อีก 1 ตัวอักษร (ในกรณีของฉันB):

    davidamick@myputer:~$ echo "* * * * * /bin/echo 'Baaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa' > /tmp/test.log" | crontab -
    davidamick@myputer:~$
    
  • รออีกนาทีพบว่าไฟล์ที่ชื่อ/tmp/test.loถูกสร้างขึ้นด้วย "a" ของคุณ นี่เป็นเพราะตัวละครที่ 1,000 ถูกตัดทอน
  • หากต้องการยืนยันให้ลบการเพิ่มBและเพิ่ม a 1ไปยังชื่อไฟล์แทนเช่น:

    davidamick@myputer:~$ echo "* * * * * /bin/echo 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa' > /tmp/test1.log" | crontab -
    
  • รออีกสักครู่ให้สังเกตว่าไฟล์ชื่อ/tmp/test1.loนั้นถูกสร้างขึ้นด้วย "a" ของคุณ
  • สำหรับหลักฐานโบนัสสร้าง symlink จาก/bin/echoไป/usr/bin/echoและพบว่าคุณจะต้องลบเพิ่มอีก 4 ตัวละครจากคำสั่งของคุณ

3
ฉันเพิ่งตรวจสอบสิ่งนี้มันเป็นความจริง cronบน Ubuntu 14.04 ของฉันตัดคำสั่งอย่างเงียบ ๆ เป็น 999 ตัวอักษร นี่คือถั่วดังนั้นฉันใช้เวลาสักครู่เพื่อย่อยมัน และนี่เป็นสถานที่แห่งเดียวในอินเทอร์เน็ตที่มีเอกสารพร้อม 1 upvote
nh2

ลองนึกภาพคุณมีคำสั่งที่ชอบ... && stop-power-plant; start-power-plantและ cron เพียงเงียบสับปิด; start-power-plant
NH2

1
หลังจากผ่านไปเกือบ 30 ปี (cron จากอย่างน้อย 1988) บางจิตวิญญาณที่สดใสทำให้มันโยนข้อผิดพลาด: github.com/systemd-cron/crontab/commit/...
NH2

1
ดูเหมือนว่า debian มีรายงานข้อผิดพลาดสำหรับสิ่งนี้: bugs.debian.org/cgi-bin/bugreport.cgi?bug=686223
nh2

หากคุณโชคดีการตัดจะเกิดขึ้นในเครื่องหมายคำพูดและคุณจะได้รับ/bin/sh: 1: Syntax error: Unterminated quoted stringแต่ไม่มีอะไรรับประกันได้
nh2
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.