Tôi có tập tin sau đây trong /etc/cron.hourly
. Mục đích của tập lệnh này là tạo bản sao lưu kết xuất docker-MongoDB mỗi giờ và sau đó sử dụng rclone để đồng bộ hóa tệp kết xuất này với nội dung trong thư mục Google Drive.
Tên tập lệnh:
rclone_Linux_MongoDB_Sync
Kịch bản:
#!/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/
# Tệp cấu hình RClone
RCLONE_CONFIG=/home/ubuntu/.config/rclone/rclone.conf
xuất RCLONE_CONFIG
#if [[ "`pidof -x $(basename $0) -o %PPID`" ]]; sau đó thoát ra; fi
/usr/bin/rclone sync /data/dump/myDB/MongoDB_Backup:MongoDB_Current
Tôi đã làm:
sudo chmod +x /etc/cron.hourly/rclone_Linux_MongoDB_Sync
sudo chmod 777 /etc/cron.hourly/rclone_Linux_MongoDB_Sync
Lưu ý làm thế nào tôi không có .sh
phần mở rộng cho tập lệnh.Trước đây, đây là vấn đề của tôi. Bây giờ, khi tôi chạy phần sau, tập lệnh của tôi sẽ hiển thị.
run-parts --test /etc/cron.hourly
Tập lệnh của tôi cũng chạy chính xác khi tôi thực hiện:
./rclone_Linux_MongoDB_Sync
Nó cũng chạy khi tôi làm:
bộ phận chạy /etc/cron.hourly
Tôi đã kiểm tra/etc/crontab với:
con mèo /etc/crontab
Một phần của kết quả là như sau. Theo sự hiểu biết của tôi, điều này là chính xác.
17 * * * * root cd / && run-parts --report /etc/cron.hourly
25 6 * * * kiểm tra gốc -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )
47 Kiểm tra gốc 6 * * 7 -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly )
52 6 1 * * kiểm tra gốc -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly )
#
Tôi đã đánh giá các bản ghi cho cron như sau:
grep CRON /var/log/syslog
Đối với hàng ngày, hàng tuần và hàng tháng, tôi tin rằng trước đây chúng không hoạt động do anacron chưa được cài đặt. Tôi đã cài đặt anacron với:
sudo apt-get cài đặt anacron
cron.hourly chạy vào phút thứ 17 của giờ, như được biểu thị bằng /etc/crontab
. Tương ứng với điều này, tôi thấy những điều sau đây được lặp lại mỗi lần, với 17 dấu thời gian.
Ngày 19 tháng 7 17:17:01 vps-fac5a33c CRON[1039453]: (root) CMD ( cd / && run-parts --report /etc/cron.hourly)
Ngày 19 tháng 7 17:17:09 vps-fac5a33c CRON[1039452]: (root) MAIL (đã gửi 104 byte đầu ra qua thư nhưng có trạng thái 0x004b từ MTA#012)
Ngày 19 tháng 7 18:17:01 vps-fac5a33c CRON[1045250]: (root) CMD ( cd / && run-parts --report /etc/cron.hourly)
Ngày 19 tháng 7 18:17:18 vps-fac5a33c CRON[1045249]: (root) MAIL (đã gửi 104 byte đầu ra qua thư nhưng có trạng thái 0x004b từ MTA#012)
Ngày 19 tháng 7 19:17:01 vps-fac5a33c CRON[1051174]: (root) CMD ( cd / && run-parts --report /etc/cron.hourly)
Ngày 19 tháng 7 19:17:21 vps-fac5a33c CRON[1051173]: (root) MAIL (đã gửi 104 byte đầu ra qua thư nhưng có trạng thái 0x004b từ MTA#012)
Có lẽ có một số điều tôi đã làm mà tôi đã quên và không liệt kê ở đây.Tuy nhiên, tôi không hiểu tại sao điều này không hoạt động. Tôi đã đánh giá nhiều bài đăng trên diễn đàn khác nhau, đã thử quy trình của họ nhưng không hiệu quả với tôi.
Tại sao tập lệnh của tôi không chạy mỗi giờ khi nó được đặt trong /etc/cron.hourly
?
Nó không tự chạy. Nó sẽ chạy mỗi giờ.
Là một lưu ý bổ sung, tập lệnh của tôi trước đây có:
#!/bin/bash
Tuy nhiên, dựa trên một số bài viết, tôi đã thay đổi nó thành:
#!/bin/sh
Khi tôi chạy kiểm tra vỏ sò
trên tập lệnh của tôi, không có gì được hiển thị, cho biết rằng nó vẫn ổn theo kiểm tra vỏ sò
và đúng về mặt cú pháp:
shellcheck rclone_Linux_MongoDB_Sync
Đã thêm phần sau vào đầu tập lệnh sau #!/bin/sh
. Điều này là để xem lỗi nào đang xảy ra trong tập lệnh trong quá trình thực thi.
exec 1>>/tmp/rclone_Linux_MongoDB_Sync.log 2>&1
Tôi đã thay đổi crontab cho .hourly thành thời gian gần đây để không phải đợi đến phút 17 để nó chạy. Do bổ sung ở trên vào tệp tập lệnh của tôi, tệp sau đã được tạo:
/tmp/rclone_Linux_MongoDB_Sync.log
Sau khi chạy:
con mèo /tmp/rclone_Linux_MongoDB_Sync.log
Sau đây đã được hiển thị.
thiết bị đầu vào không phải là TTY
thiết bị đầu vào không phải là TTY
Cảm ơn mọi người!