ฉันมีไฟล์ต่อไปนี้ใน /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
ขอบคุณทุกคน!