Score:1

ฉันจะทราบได้อย่างไรว่าทำไม crontab ของฉันถึงไม่ทำงาน

ธง in

ฉันเป็นมือใหม่ ... ฉันจะเอามันไว้ข้างหน้า ฉันมีเซิร์ฟเวอร์ Ubuntu 20.04 LTS อย่างง่ายที่ใช้เป็นเซิร์ฟเวอร์ minecraft เท่านั้น

crontab ทำให้ฉันมีปัญหา

*/10 * * * * หน้าจอ -S minecraft -p 0 -X สิ่งที่ "บันทึกทั้งหมด^M"
@reboot /home/minecraft/startserver.sh
@ค้นหารายวัน /home/minecraft/backup/* -mtime +6 -type f -delete
@daily zip -9 -r --exclude=*backup* --exclude=*web* --exclude=*crash-reports* --exclude=*lost+found* /home/minecraft/backup/$(วันที่ + "%Y.%m.%d %I.%M %P").zip /home/minecraft

บรรทัดแรกใช้งานได้ แต่ @daily และ @reboot ไม่ทำงานเลย คำสั่งทั้งหมดทำงานจากเทอร์มินัลโดยไม่มีข้อผิดพลาด

โปรดช่วยฉันเข้าใจสิ่งนี้ ฉันไม่มีประสบการณ์กับ linux และฉันกำลังพยายามค้นหาสิ่งนี้ ฉันทราบดีว่าบางคนอาจคิดว่านี่จะจัดการได้ดีกว่าด้วย systemd แต่ฉันยังใหม่เกินไปที่จะคิดออกและฉันไม่ต้องการติดตั้งสคริปต์ที่ซ่อมแซมไม่ได้

เหตุใด crontab จึงล้มเหลวในบรรทัดเหล่านี้ ฉันไม่คิดว่ามันเป็นสิทธิ์ โปรดช่วยฉันแก้ปัญหานี้

ขอบคุณที่สละเวลา

แก้ไข: ตกลงหลังจากขุดไปรอบ ๆ ปัญหาเกี่ยวกับสคริปต์ startserver อยู่ในตัวสคริปต์เองไม่ใช่ crontab ฉันพบว่าฉันจำเป็นต้องมี -d ตั้งค่าสถานะสำหรับคำสั่งหน้าจอใน crontab

คำสั่ง zip ใช้งานได้ แต่ฉันคิดไม่ออกว่าจะใช้รหัส Escape ใดเพื่อเพิ่มช่องว่างในวันที่ backup/$(วันที่ +"\%Y.\%m.\%d \%I.\%M \%P").zip ใช้เครื่องหมายทับ \ หรือใช้ " " ไม่ทำงาน. ถ้าใครรู้วิธีออกจากช่องว่างด้วยการสร้างไฟล์ zip โปรดแจ้งให้เราทราบ

ฉันได้รับแจ้งในความคิดเห็นให้ใช้รูปแบบที่เหมาะสมสำหรับการแก้ไขโพสต์ ฉันไม่รู้ว่ามันหมายถึงอะไร นี่เป็นโพสต์แรกของฉัน

สวัสดีโครนี่! ยินดีต้อนรับสู่ AskUbuntu! นั่นคือ ^M อักขระสองตัว (^ และ M) หรือการขึ้นบรรทัดใหม่ในรูปแบบ Windows หรือไม่ หากมีการขึ้นบรรทัดใหม่ผิด 3 บรรทัดถัดไปอาจตีความไม่ถูกต้อง
Cronie avatar
in flag
@tu-ReinstateMonica-dorduh บรรทัดนั้นกำลังส่งคำสั่งไปยังเซิร์ฟเวอร์ minecraft ในหน้าจอ ^M อยู่ในเครื่องหมายคำพูด นั่นไม่ควรแยกออกใช่ไหม --แก้ไข: ฉันแสดงความคิดเห็นในบรรทัดนั้นและไม่ได้แก้ปัญหา
au flag
คุณต้องหลีกเลี่ยงอักขระ `%` (`...date +"\%Y.\%m.\%d \%I.\%M \%P"...`) (ดู [ที่นี่]( https://unix.stackexchange.com/questions/119450)) และอาจอ้างอิงอักขระตัวแทนในคำสั่ง `zip` (เช่น `--exclude="*backup*"`) (แต่ไม่ใช่ใน `find ` คำสั่ง). นอกเหนือจากนั้น ฉันจะบันทึกเอาต์พุตและข้อผิดพลาดจากคำสั่งโดยเพิ่มบางอย่างเช่น `>>/tmp/minecraftserver.log 2>&1` ในแต่ละบรรทัด (แต่มีชื่อไฟล์ต่างกันสำหรับแต่ละอัน) จากนั้นตรวจสอบไฟล์บันทึกเหล่านั้น ดูว่าพวกเขาให้ข้อบ่งชี้ว่าเกิดอะไรขึ้น
au flag
ข้อมูลการแก้ปัญหาเพิ่มเติม [ที่นี่](https://askubuntu.com/questions/23009/why-crontab-scripts-are-not-working) และ [ที่นี่](https://serverfault.com/questions/449651/why- is-my-crontab-not-work-and-how-i-trouble-it-it)
au flag
@Cronie การเพิ่มช่องว่างในชื่อไฟล์นั้นยุ่งยาก เพราะคุณทั้งคู่ต้องใส่เครื่องหมายคำพูดรอบสตริงรูปแบบเป็น `date` เพื่อบอกว่ามีช่องว่าง *ใน* อาร์กิวเมนต์ (แทนที่จะเป็นระหว่างอาร์กิวเมนต์) *และ* คุณต้อง ใส่เครื่องหมายอัญประกาศคู่รอบสิ่งที่ `$( )` เพื่อบอกเชลล์ไม่ให้แยกคำในผลลัพธ์ที่ได้รับ มันอาจจะสะอาดที่สุดที่จะใส่เครื่องหมายคำพูดทั้งไฟล์: `... "/home/minecraft/backup/$(date +"\%Y.\%m.\%d \%I.\%M \%P" ).zip" ...`. BTW คำแนะนำที่สองของ waltinator ให้ใส่สิ่งนี้ในสคริปต์ (และลบการหลบหนีเหล่านั้น) และเพียงแค่ให้รายการ cron เรียกใช้สคริปต์
Score:0
ธง it

งานวิ่งผ่าน ครอน, หรือ ระบบ สคริปต์เริ่มต้นใช้งานไม่ได้ทำงานในสภาพแวดล้อมรันไทม์เดียวกันกับที่คุณมีบนเดสก์ท็อป ระบบ สคริปต์เริ่มต้นทำงานเป็น ราก. ไม่มีของคุณ เส้นทาง การเปลี่ยนแปลงหรือการตั้งค่าตัวแปรสภาพแวดล้อมอื่นๆ จะถูกส่งไปยังของคุณโดยอัตโนมัติ ครอน งาน. ตัวอย่างเช่นไม่มี $จอแสดงผลดังนั้นโปรแกรม GUI จึงต้องการการดูแลเป็นพิเศษ (อ่าน ผู้ชาย xhost).

หนึ่งสามารถตั้งค่าตัวแปรสภาพแวดล้อมสำหรับทุกคน ครอน งานใน crontab ไฟล์ อ่าน ผู้ชาย 5 crontab.

ดูผลลัพธ์ของ echo "=== id ===;id;echo "=== ชุด ==";set;echo "=== env ==";env | sort;echo "=== นามแฝง ===";นามแฝง ในแต่ละสภาพแวดล้อมของคุณ

ตั้งแต่ สั่งการ ส่วนหนึ่งของ crontab บรรทัดถูกตีความโดยค่าเริ่มต้น /ถัง/shซึ่งมีไวยากรณ์ที่ง่ายกว่า /ถัง/ทุบตีฉันขอแนะนำให้มี สั่งการ เป็นสายไปยัง ทุบตี สคริปต์ (ปฏิบัติการ, เมาต์, ขึ้นต้นด้วย #!/bin/bash) ซึ่งตั้งค่าสภาพแวดล้อมแล้วเรียกใช้โปรแกรมที่ต้องการ

Cronie avatar
in flag
ขออภัย ฉันควรจะบอกว่านี่ไม่ใช่ GUI Ubuntu เซิร์ฟเวอร์เป็นเทอร์มินัลเท่านั้น ฉันป้อนคำสั่ง ```echo``` ที่คุณแนะนำ และมันให้ข้อมูลหลายหน้าที่ฉันไม่พร้อมที่จะถอดรหัส ฉันไม่ชัดเจนว่าคุณต้องการเพิ่ม ```#!bin/bash``` ใน crontab หรือสคริปต์ที่ฉันเรียกใช้ สคริปต์ที่ฉันกำลังเรียกใช้มี ```#!bin/bash``` ในส่วนหัวอยู่แล้ว
waltinator avatar
it flag
รันคำสั่ง `echo` ในสภาพแวดล้อมเทอร์มินัลของคุณ บันทึกผลลัพธ์ในไฟล์ รันคำสั่งเหล่านั้นใหม่ผ่าน `crontab` บันทึกผลลัพธ์ในไฟล์อื่น เปรียบเทียบไฟล์ `diff file1 file2 | น้อยกว่า`. ตัวแปรสภาพแวดล้อมบางตัวหายไปในไฟล์ที่สร้างโดย `crontab` หรือมีค่าต่างกัน เช่น 'เส้นทาง' เนื่องจากฟิลด์ `crontab` `command` ถูกตีความด้วยไวยากรณ์ `/bin/sh` ผู้คนจึงมักพยายามใช้ `/bin/bash ขั้นสูงอย่างผิดๆ
waltinator avatar
it flag
เนื่องจากฟิลด์ `crontab` `command` ถูกตีความด้วยไวยากรณ์ `/bin/sh` ผู้คนมักจะพยายามใช้ไวยากรณ์ขั้นสูงอย่างผิดๆ `/bin/bash` ดังนั้นฉันขอแนะนำให้ใช้การอ้างอิงสคริปต์เป็น ` crontab` `command` (`/usr/local/bin/script7`) และบันทึกความฉลาด การดีบักโค้ด การสร้างคำสั่ง การทดสอบ ("วันอังคารที่ 2 นี้หรือเปล่า") สำหรับ `script7` ซึ่งขึ้นต้นด้วย `#!/bin/bash`
waltinator avatar
it flag
โปรด [แก้ไข] โพสต์ของคุณเพื่อเพิ่มข้อมูลใหม่ในรูปแบบที่เหมาะสม ข้อมูลที่เพิ่มผ่านความคิดเห็นนั้นยากสำหรับคุณในการจัดรูปแบบ ยากสำหรับเราที่จะอ่านและไม่สนใจโดยผู้อ่านในอนาคต โปรดคลิกÂ [แก้ไข]Â และเพิ่มข้อมูลสำคัญนั้นในคำถามของคุณ เพื่อให้ข้อเท็จจริงทั้งหมดที่เราต้องการอยู่ในคำถาม โปรดอย่าใช้ Add Comment เนื่องจากเป็นอัปลิงค์ของเราที่ส่งถึงคุณ ข้อเท็จจริงทั้งหมดเกี่ยวกับระบบของคุณควรอยู่ในคำถามเกี่ยวกับ [แก้ไข]

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา