テストしようとしていますmonit
。アイデアは、テキストを出力する python スクリプトと、開始/停止スクリプトとして機能するシェル スクリプトがあることです。このシェル スクリプトは、出力を というファイルにリダイレクトしますfetch_output
。
私がやりたいのはmonit
、そのファイルのタイムスタンプを確認し、直前に変更されていない場合はスクリプトを再起動することです。
ここに私のpythonスクリプトがあります:
test.py
import time
import sys
for i in range(100):
time.sleep(1)
sys.stdout.write('a'*i)
sys.stdout.flush()
wrapper_test
#! /bin/bash
PIDFILE=/home/jhon/workspace/producer/wrapper_test.pid
case $1 in
start)
echo $$ > ${PIDFILE};
exec /usr/bin/python /home/jhon/workspace/producer/test.py >> fetch_output.txt 2>&1
;;
stop)
kill `cat ${PIDFILE}`
;;
*)
echo "Usage: wrapper {start|stop}"
;;
esac
exit 0
/etc/monit/conf.d/test
check process wrapper_test with pidfile /home/jhon/workspace/producer/wrapper_test.pid
start program = "/home/jhon/workspace/producer/wrapper_test start"
stop program = "/home/jhon/workspace/producer/wrapper_test stop"
depends on fetch_output
check file fetch_output with path /home/jhon/workspace/producer
if timestamp > 1 minutes then
exec "/usr/bin/monit restart wrapper_test"
問題は、このスクリプトが出力をファイルに書き込まないことです。しかし、私はできる
ps aux | grep test
root 18333 0.0 0.0 31108 4612 ? S 14:39 0:00 /usr/bin/python /home/jhon/workspace/producer/test.py
だから私はそれが機能していることを見ることができますが、私を混乱させる別のことは、私がmonit status
fetch_output ステータスパラメータを実行するときInvalid Type
です。それが何を意味するのかわかりませんが、何かが明らかに間違っています。
Process 'wrapper_test'
status Initializing
monitoring status Initializing
data collected Fri, 23 Aug 2013 14:32:17
File 'fetch_output'
status Invalid type
monitoring status Monitored
permission 0
uid 0
gid 0
timestamp Wed, 31 Dec 1969 19:00:00
size 0 B
data collected Fri, 23 Aug 2013 14:42:14