Câu trả lời:
Nếu nó được khởi chạy từ init, bạn có thể thấy nó được khởi động lại bởi init. Đặt hành động cho quy trình thành 'hồi sinh' cho các cấp độ chạy mà bạn muốn quy trình tại.
Tôi đã trả lời một câu hỏi tương tự trước đây .
Trong trường hợp của bạn:
#!/bin/bash
while ! <<command>>
do
sleep 1
echo "Restarting program..."
done
Thay thế <<command>>
bằng lệnh bạn muốn thực thi. Quá trình phải kết thúc với mã thoát 0 để phá vỡ vòng lặp. Nếu không, nó được khởi động lại bởi tập lệnh.
Bạn chỉ muốn khởi động lại nó nếu nó chết? Vấn đề với điều này là nó không xử lý các tình huống đóng băng. Vì vậy, để kiểm tra quá trình sẽ không luôn luôn giúp đỡ. Vì vậy, nếu đây là một cái gì đó giống như một máy chủ web, bạn muốn có một kịch bản kiểm tra nó từ quan điểm của người dùng.
Nếu bạn thiết lập Giám sát Nagios, thì bạn có thể sử dụng trình xử lý sự kiện . Đây chỉ là các tập lệnh mà bạn viết sẽ chạy khi dịch vụ ngừng hoạt động, vì vậy bạn có thể có một tập lệnh khởi động lại một cái gì đó giống như Apache nếu trang web bị hỏng.
Tùy thuộc vào bản phân phối, nhưng chúng tôi đã sử dụng thành công "monit" cho nhiệm vụ này. Nó khá dễ. Bạn có thể viết séc của riêng bạn, theo dõi quy trình PID, v.v.
Ví dụ tệp monitrc:
check process sshd with pidfile /var/run/sshd.pid
start program "/etc/init.d/ssh start"
stop program "/etc/init.d/ssh stop"
if failed port 22 protocol ssh then restart
if 5 restarts within 5 cycles then timeout
Trả lời ngắn gọn : Không bạn phải tự làm điều đó.
Câu trả lời dài : Bạn sẽ cần một quy trình cha mẹ để bắt đầu nó, và sau đó tiếp tục kiểm tra xem nó còn tồn tại không và khởi động lại nếu cần.
Bạn có thể sử dụng một cái gì đó như daemontools
để quản lý nó.