Crontab chạy trước khi nfs gắn kết


9

Chạy Cronjob @reboot trả về tệp đó trên chia sẻ nfs không tồn tại.

Thí dụ

@reboot python /abs/path/to/script.py

thư từ crontab khi khởi động đọc "nhiều hơn hoặc ít hơn"

/usr/bin/python can't open file "/abs/path/to/script.py": [Error No. 2] No such file or folder.

Script có thể được chạy từ dòng lệnh mà không gặp sự cố nào ..
Lý thuyết là cronjob đang chạy trước khi mount được chạy.
Các câu hỏi.

  1. Liệu lý thuyết này có đúng không?
  2. Có cách nào để buộc công việc phải than van cho đến khi ổ đĩa được gắn kết không? .... Khác với việc chỉ cần ngủ 60 trong lệnh. ;) Tôi đã thử điều đó rồi, nhưng nó đã thành công và bỏ lỡ và tôi cần kịch bản chạy nhanh 100% thời gian.

2
Bạn đang sử dụng bản phân phối nào?
Sven

Câu trả lời:


16

Bạn có thể sử dụng lệnh mountpoint để đảm bảo mount đã diễn ra trước khi bạn thực thi lệnh của mình, ví dụ (giả sử / abs là điểm mount)

#!/bin/bash
while true
do
    if mountpoint -q /abs
        then
            /usr/bin/python /abs/path/to/script.py
            break
        fi
    sleep 10
done

3
+1 Tôi chưa bao giờ nghe nói về mountpoint- điều này khá hữu ích!
Sven

@SvenW Tương tự ở đây. Bây giờ tôi đang cập nhật một số ít các kịch bản với điều này.
Aaron Copley

Chọn đây là câu trả lời vì trong khi hệ thống khởi động lại, chúng ta thậm chí không biết liệu nic có sẵn để gắn hệ thống hay không và cố gắn hệ thống tập tin trước khi nic sẵn sàng có thể là thảm họa.
Rusty Weber

4

Tôi không chắc vấn đề là gì vì cron bắt đầu sau khi kết nối mạng. (Ít nhất là trong Red Hat và các công cụ phái sinh.) Bạn có gắn kết /etc/fstabvới _netdevtùy chọn hay không?

Cách tiêu chuẩn để thực hiện một cái gì đó khi khởi động là đưa nó vào /etc/rc.local. Điều này sẽ được chạy sau khi mạng được khởi tạo và tất cả các dịch vụ khác được bắt đầu. (Bao gồm cả việc gắn hệ thống tập tin từ xa.)

(Hoặc có lý do để chỉ thực thi tập lệnh sau khi khởi động lại theo nghĩa đen?)


Có, chia sẻ được gắn kết trong fstab. Tôi đã chạy trên Ubuntu, điều đó có nghĩa là mạng có thể chưa chạy. etc / rc.local dường như là giải pháp tốt nhất, nhưng nếu @restart tồn tại trong crontab, giả định là nó sẽ hoạt động.
Rusty Weber

1

Dưới đây là một số ý tưởng cho bạn:

  1. kiểm tra nếu NFS được gắn kết. Nếu không, gắn kết nó, sau đó chạy tập lệnh của bạn:

    [ ! -f /abs/path/to/script.py ] && mount -t nfs device dir && python /abs/path/to/script.py

  2. chạy tập lệnh của bạn trong start()chức năng của tập lệnh init NFS:

    echo -n $"Starting NFS mountd: "
    daemon rpc.mountd $RPCMOUNTDOPTS
    RETVAL=$?
    echo
    [ $RETVAL -ne 0 ] && exit $RETVAL || python /abs/path/to/script.py
    

1

Để chắc chắn rằng kịch bản python có thể chạy. Bạn sẽ cần phải bọc nó trong một tập lệnh được lưu trữ trên bộ nhớ cục bộ để xác minh rằng điểm gắn kết đã xuất hiện.

Một cái gì đó như (mã giả cảnh báo):

while (!ScriptExists && ErrorCount < 10)
do
    mount /my/mount/point
    sleep 10
    ErrorCount++
done
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.