Score:2

สคริปต์ใน cron.hourly ไม่ทำงาน

ธง us

ฉันมีไฟล์ต่อไปนี้ใน /etc/cron.hourly. วัตถุประสงค์ของสคริปต์นี้คือการสร้างการสำรองข้อมูลดัมพ์ของนักเทียบท่า-MongoDB ทุกชั่วโมง จากนั้นใช้ rclone เพื่อซิงโครไนซ์ไฟล์ดัมพ์นี้กับเนื้อหาในโฟลเดอร์ Google Drive

ชื่อสคริปต์:

rclone_Linux_MongoDB_Sync

สคริปต์:

#!/bin/sh

/usr/bin/docker exec -it mongodb mkdir /data/dump
/usr/bin/docker exec -it mongodb mongodump --db myDB -u theUser -p thePassword --gzip --out /data/dump/

# ไฟล์กำหนดค่า RClone
RCLONE_CONFIG=/home/ubuntu/.config/rclone/rclone.conf
ส่งออก RCLONE_CONFIG
#if [[ "`pidof -x $(ชื่อฐาน $0) -o %PPID`" ]]; แล้วออก; ไฟ

/usr/bin/rclone ซิงค์ /data/dump/myDB/MongoDB_Backup:MongoDB_Current

ฉันได้ทำ:

sudo chmod +x /etc/cron.hourly/rclone_Linux_MongoDB_Sync
sudo chmod 777 /etc/cron.hourly/rclone_Linux_MongoDB_Sync

สังเกตว่าฉันไม่มี .sh ส่วนขยายสำหรับสคริปต์ก่อนหน้านี้เป็นปัญหาของฉัน เมื่อฉันเรียกใช้สิ่งต่อไปนี้ สคริปต์ของฉันจะแสดงขึ้น

รันชิ้นส่วน --test /etc/cron.hourly

สคริปต์ของฉันยังทำงานได้อย่างถูกต้องเมื่อฉัน:

./rclone_Linux_MongoDB_Sync

มันยังทำงานเมื่อฉันทำ:

ส่วนการทำงาน /etc/cron.hourly

ฉันได้ตรวจสอบ /etc/crontab ด้วย:

แมว /etc/crontab

ผลลัพธ์ส่วนหนึ่งมีดังนี้ ตามความเข้าใจของฉัน สิ่งนี้ถูกต้อง

17 * * * * root cd / && run-parts --report /etc/cron.hourly
25 6 * * * การทดสอบราก -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )
47 6 * * 7 การทดสอบรูต -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly )
52 6 1 * * การทดสอบรูต -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly )
#

ฉันประเมินบันทึกสำหรับ cron ด้วยสิ่งต่อไปนี้:

 grep CRON /var/log/syslog

สำหรับรายวัน รายสัปดาห์ และรายเดือน ฉันเชื่อว่าก่อนหน้านี้ไม่ทำงานเนื่องจากไม่ได้ติดตั้ง anacron ฉันติดตั้ง anacron ด้วย:

sudo apt-get ติดตั้ง anacron

cron.hourly ทำงานที่เครื่องหมาย 17 นาทีของชั่วโมง ตามที่ระบุ /etc/crontab. ตามนี้ ฉันเห็นสิ่งต่อไปนี้ซ้ำกันทุกครั้ง โดยมีการประทับเวลา 17 ครั้ง

19 กรกฎาคม 17:17:01 vps-fac5a33c CRON[1039453]: (รูท) CMD ( cd / && run-parts --report /etc/cron.hourly)
19 ก.ค. 17:17:09 vps-fac5a33c CRON[1039452]: (รูท) MAIL (ส่งเอาต์พุต 104 ไบต์ แต่ได้รับสถานะ 0x004b จาก MTA#012)
19 ก.ค. 18:17:01 vps-fac5a33c CRON[1045250]: (รูท) CMD ( cd / && run-parts --report /etc/cron.hourly)
19 กรกฎาคม 18:17:18 vps-fac5a33c CRON[1045249]: (รูท) MAIL (ส่งเอาต์พุต 104 ไบต์ทางไปรษณีย์ แต่ได้รับสถานะ 0x004b จาก MTA#012)
19 กรกฎาคม 19:17:01 vps-fac5a33c CRON[1051174]: (รูท) CMD ( cd / && run-parts --report /etc/cron.hourly)
19 ก.ค. 19:17:21 vps-fac5a33c CRON[1051173]: (root) MAIL (ส่งเอาต์พุต 104 ไบต์ทางไปรษณีย์ แต่ได้รับสถานะ 0x004b จาก MTA#012)

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

เหตุใดสคริปต์ของฉันจึงไม่ทำงานทุกชั่วโมงเมื่อวางสคริปต์ /etc/cron.hourly?

มันไม่ได้ทำงานด้วยตัวมันเอง ควรทำงานทุกชั่วโมง

หมายเหตุเพิ่มเติม ก่อนหน้านี้สคริปต์ของฉันมี:

#!/bin/bash

อย่างไรก็ตาม จากบางโพสต์ ฉันเปลี่ยนเป็น:

#!/bin/sh

เมื่อฉันวิ่ง เชลล์เช็ค ในสคริปต์ของฉันไม่มีสิ่งใดปรากฏขึ้นแสดงว่าใช้ได้ตาม เชลล์เช็ค และถูกต้องตามวากยสัมพันธ์:

เชลล์ตรวจสอบ rclone_Linux_MongoDB_Sync

เพิ่มสิ่งต่อไปนี้ที่ด้านบนของสคริปต์หลังจากนั้น #!/bin/sh. เพื่อดูข้อผิดพลาดที่เกิดขึ้นภายในสคริปต์ระหว่างการดำเนินการ

ผู้บริหาร 1>>/tmp/rclone_Linux_MongoDB_Sync.log 2>&1

ฉันเปลี่ยน crontab เป็น .hourly เป็นเวลาล่าสุดเพื่อไม่ต้องรอจนกว่าจะถึงเครื่องหมาย 17 นาทีจึงจะทำงานได้ เนื่องจากการเพิ่มไฟล์สคริปต์ของฉันข้างต้น ไฟล์ต่อไปนี้จึงถูกสร้างขึ้น:

/tmp/rclone_Linux_MongoDB_Sync.log

หลังจากวิ่ง:

 แมว /tmp/rclone_Linux_MongoDB_Sync.log

ต่อไปนี้ปรากฏขึ้น

อุปกรณ์อินพุตไม่ใช่ TTY
อุปกรณ์อินพุตไม่ใช่ TTY

ขอบคุณทุกคน!

us flag
1) ถ้า `shellcheck` ไม่แสดงอะไรเลย แสดงว่าสคริปต์นั้นถูกต้องตามวากยสัมพันธ์ 2) โปรดอย่าใช้ `chmod 777` เพื่อทำให้สคริปต์สามารถเขียนได้ทั่วโลก (`755` ก็เพียงพอแล้ว `u+rx` เป็นข้อกำหนดขั้นต่ำ) 3) ส่วนที่เกี่ยวข้องกับงานรายวัน/รายสัปดาห์/รายเดือนสามารถถอดออกได้ ซึ่งไม่เกี่ยวข้องกัน (และจำเป็นต้องใช้ anacron _not_ ที่นี่ การทดสอบระบุว่า "ดำเนินการคำสั่งทางขวามือเฉพาะเมื่อไม่พบ anacron และดำเนินการได้ ซึ่งในกรณีนี้จะใช้คำสั่งหลัง ดูแลสิ่งนี้!) 4) คุณแน่ใจหรือว่าปัญหาของคุณยังคงอยู่?
hr flag
btw หากคุณไม่เคยแสดงความคิดเห็น `#if [[` คุณจะต้องเปลี่ยน shebang กลับไปเป็น `#!/bin/bash` เนื่องจาก POSIX sh ไม่รองรับการทดสอบแบบขยาย `[[...]]` สไตล์ ksh
geekygeek avatar
us flag
ขอบคุณมากสำหรับคำแนะนำ ฉันจะจำและนำสิ่งที่คุณกล่าวถึงไปใช้ในสคริปต์ของฉันด้วย
geekygeek avatar
us flag
ตกลง ฉันได้แก้ไขคำตอบเพื่อรวมสิ่งที่กำลังแสดงในบันทึก
geekygeek avatar
us flag
แน่นอนจะทำ ขอบคุณ
Score:1
ธง us

เอาล่ะ ดูเหมือนว่านี่เป็นปัญหาเกี่ยวกับ นักเทียบท่า. เมื่อออกคำสั่งใน นักเทียบท่า ผ่าน ครอน, แทน -มัน ใช้เท่านั้น -ผม. ตอนนี้ฉันเปลี่ยนไปแล้ว นักเทียบท่า คำสั่งตามนั้น

สคริปต์ที่เปลี่ยนแปลง:

#!/bin/sh
ผู้บริหาร 1>>/tmp/rclone_Linux_MongoDB_Sync.log 2>&1
/usr/bin/docker exec -i mongodb mkdir /data/dump
/usr/bin/docker exec -i mongodb mongodump --db myDB -u theUser -p thePassword --gzip --out /data/dump/

# ไฟล์กำหนดค่า RClone
RCLONE_CONFIG=/home/ubuntu/.config/rclone/rclone.conf
ส่งออก RCLONE_CONFIG
#if [[ "`pidof -x $(ชื่อฐาน $0) -o %PPID`" ]]; แล้วออก; ไฟ

/usr/bin/rclone ซิงค์ /data/dump/myDB/MongoDB_Backup:MongoDB_Current

ตอนนี้ สคริปต์สามารถทำงานได้ตามที่ตั้งใจไว้ และทำงานโดยอัตโนมัติในแต่ละชั่วโมง การแก้ไขคือการเปลี่ยน -มัน ใน นักเทียบท่า คำสั่งเพียง -ผม.

hr flag
จำไว้ว่าคุณสามารถยอมรับคำตอบของคุณเองได้ ;)
Score:0
ธง us

บรรทัดที่สี่ของสคริปต์ของคุณดูน่าสงสัย ตามที่ได้รับการยืนยันจาก เชลล์เช็ค:

% shellcheck rclone_Linux_MongoDB_Sync
ใน rclone_Linux_MongoDB_Sync บรรทัดที่ 4:
/usr/bin/docker exec -it mongodb mongodump --db dashboarddb -u hifi_dbpc_host ->
    ^-- SC1009: ข้อผิดพลาดทางไวยากรณ์ที่กล่าวถึงอยู่ในคำสั่งง่ายๆ นี้
    ^-- SC1073: แยกวิเคราะห์การเปลี่ยนเส้นทางนี้ไม่ได้ แก้ไขเพื่อให้ตรวจสอบได้มากขึ้น
    ^-- SC1072: แก้ไขปัญหาที่กล่าวถึงแล้วลองอีกครั้ง
geekygeek avatar
us flag
ขอโทษ. ดูเหมือนว่าในขณะที่คัดลอกและวางมีข้อผิดพลาดบางอย่าง -> ฉันเชื่อว่ามาจากแมวแสดงว่าบรรทัดนั้นดำเนินต่อไป ตอนนี้ฉันได้อัปเดตรหัสแล้ว
geekygeek avatar
us flag
เมื่อฉันเรียกใช้ shellscript ในเครื่อง จะไม่มีอะไรปรากฏขึ้น

โพสต์คำตอบ

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