Điểm:2

Tập lệnh trong cron.hourly không chạy

lá cờ us

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!

lá cờ us
1) Nếu `shellcheck` không hiển thị gì, điều đó có nghĩa là tập lệnh đúng về mặt cú pháp. 2) Vui lòng không bao giờ sử dụng `chmod 777` để làm cho tập lệnh có thể ghi được trên thế giới (`755` là đủ, `u+rx` là yêu cầu tối thiểu). 3) Phần liên quan đến các nhiệm vụ hàng ngày/hàng tuần/hàng tháng có thể bị loại bỏ, nó không liên quan (và anacron _not_ cần thiết ở đây; bài kiểm tra cho biết "chỉ thực hiện lệnh bên tay phải nếu không tìm thấy anacron và có thể thực thi được, trong trường hợp đó, lệnh sau sẽ mất quan tâm đến điều này!) 4) Bạn có chắc chắn rằng vấn đề của bạn vẫn tiếp diễn không?
lá cờ hr
btw nếu bạn từng bỏ ghi chú `#if [[` bạn sẽ cần chuyển shebang trở lại `#!/bin/bash` vì POSIX sh không hỗ trợ kiểm tra mở rộng `[[...]]` kiểu ksh
geekygeek avatar
lá cờ us
Cảm ơn bạn rất nhiều vì những lời khuyên. Tôi sẽ ghi nhớ điều đó và cũng áp dụng những gì bạn đã đề cập vào kịch bản của tôi
geekygeek avatar
lá cờ us
Được rồi, tôi đã chỉnh sửa câu trả lời của mình để bao gồm nội dung hiện đang được hiển thị trong nhật ký.
geekygeek avatar
lá cờ us
Chắc chắn sẽ làm, cảm ơn.
Điểm:1
lá cờ us

Được rồi, vậy có vẻ như đây là một vấn đề với docker. Khi ra lệnh trong docker xuyên qua cron, thay vì -nó chỉ sử dụng -tôi. bây giờ tôi đã thay đổi docker các lệnh tương ứng.

Kịch bản đã thay đổi:

#!/bin/sh
exec 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/

# 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

Giờ đây, tập lệnh có thể chạy như dự định và tự động chạy mỗi giờ. Cách khắc phục là thay đổi -nó bên trong docker lệnh để chỉ -tôi.

lá cờ hr
Hãy nhớ rằng bạn có thể chấp nhận câu trả lời của riêng bạn;)
Điểm:0
lá cờ us

Dòng bốn trong tập lệnh của bạn có vẻ đáng ngờ, như đã được xác nhận bởi kiểm tra vỏ sò:

% shellcheck rclone_Linux_MongoDB_Sync
Trong rclone_Linux_MongoDB_Sync dòng 4:
/usr/bin/docker exec -it mongodb mongodump --db dashboarddb -u hifi_dbpc_host ->
    ^-- SC1009: Lỗi cú pháp được đề cập nằm trong lệnh đơn giản này.
    ^-- SC1073: Không thể phân tích cú pháp chuyển hướng này. Khắc phục để cho phép kiểm tra nhiều hơn.
    ^-- SC1072: Khắc phục mọi sự cố được đề cập và thử lại.
geekygeek avatar
lá cờ us
Xin lỗi. Có vẻ như trong khi sao chép và dán, đã xảy ra một số lỗi. Dấu -> Tôi tin là từ con mèo, cho biết dòng tiếp tục. Bây giờ tôi đã cập nhật mã.
geekygeek avatar
lá cờ us
Khi tôi chạy shellscript cục bộ, không có gì hiển thị

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.