2009-03-21 41 views
14

Tôi có một daemon tôi đã viết bằng Python. Khi nó đang chạy, nó có một tập tin PID nằm ở /tmp/filename.pid. Nếu daemon không chạy thì tệp PID không tồn tại.Làm cách nào để kiểm tra tệp tồn tại và thực thi lệnh nếu không?

Trên Linux, làm thế nào tôi có thể kiểm tra để đảm bảo rằng tệp PID tồn tại và nếu không, hãy thực hiện lệnh để khởi động lại?

Lệnh sẽ

python daemon.py restart 

mà phải được thực hiện từ một thư mục cụ thể.

+1

"Điều này phải được thực hiện từ một thư mục cụ thể" một phần mô tả của bạn giống như một công thức gây rắc rối. Cẩn thận - suy nghĩ lại nếu có thể. –

+0

trùng lặp: http://stackoverflow.com/questions/638975/how-do-i-tell-if-a-file-does-not-exist-in-bash/ – hop

+0

/tmp là vị trí không tốt để đặt các tệp PID , vì một số bản phân phối có quy trình sạch hơn xóa tệp khỏi/tmp và người dùng có thể xóa tệp từ đó để tạo không gian. –

Trả lời

35
[ -f /tmp/filename.pid ] || python daemon.py restart 

-f kiểm tra xem con đường cho tồn tại và là một tập tin bình thường (chỉ -e kiểm tra xem con đường tồn tại)

các [] thực hiện các bài kiểm tra và trả 0 trên thành công, 1 khác

sự || là một C-like or, vì vậy nếu lệnh bên trái không thành công, hãy thực hiện lệnh ở bên phải.

Vì vậy, tuyên bố cuối cùng cho biết, nếu /tmp/filename.pid KHÔNG tồn tại thì hãy khởi động trình nền.

7

Nếu đó là bash kịch bản bạn đang phân vân về, một cái gì đó như thế này sẽ làm việc:

if [ ! -f "$FILENAME" ]; then 
    python daemon.py restart 
fi 

Một lựa chọn tốt hơn có thể được xem xét lockfile

6

Những câu trả lời khác cũng tốt cho việc phát hiện sự tồn tại của tập tin. Tuy nhiên đối với một giải pháp hoàn chỉnh, bạn có thể nên kiểm tra xem PID trong pidfile vẫn đang chạy, và đó là chương trình của bạn.

1

Một cách tiếp cận để giải quyết vấn đề là một kịch bản đảm bảo rằng daemon của bạn "vẫn" sống ...

Something như thế này (lưu ý: xử lý tín hiệu nên được bổ sung cho phù hợp khởi động/tắt máy):

$PIDFILE = "/path/to/pidfile" 

if [ ! -f "$PIDFILE" ]; then 
    echo "Pid file exists!" 
    exit 1 
fi 

while true; do 
    # Write it's own pid file 
    python your-server.py ; 

    # force removal of pid in case of unexpected death. 
    rm -f $PIDFILE; 

    # sleep for 2 seconds 
    sleep 2; 

done 

Bằng cách này, máy chủ sẽ vẫn hoạt động ngay cả khi nó chết bất ngờ.

1

Bạn cũng có thể sử dụng giải pháp sẵn sàng như Monit.

1
ls /tmp/filename.pid 

Nó trả về true nếu tệp tồn tại. Trả về false nếu tệp không tồn tại.

3
test -f filename && daemon.py restart || echo "File doesn't exists" 
Các vấn đề liên quan