カスタムbashデーモンは徐々にメモリを消費します。

カスタムbashデーモンは徐々にメモリを消費します。

こんにちは。実行時にjson-serverを作成し、プロセスが終了したときにjson-serverを再生成する接続保持デーモンプロセスを作成しました。

#!/usr/bin/bash

function start () {
    trap 'echo "Clean up and exit"; kill $js_pid; rm js_pid; exit' TERM
    exec > outfile
    exec 2> errfile
    exec 0< /dev/null

    while true; do
        (json-server --watch db.json --port 1234 &>/dev/null) &
        js_pid=$!
        echo $js_pid > js_pid
        wait $js_pid
        kill $js_pid &>/dev/null
    done
}

if [ "$1" != "__forked__" ]; then
        setsid "$0" __forked__ "$@" &
        exit
else
        shift
fi

# stop or start daemon

([ ! -f "js_pid" ] && js_pid=99999999999) || js_pid=$(cat js_pid) 

case "$1" in
    stop)
    killall simpled.sh
    ;;
    start)  
    if ! kill -0 $js_pid &>/dev/null
    then
        start
    fi
    ;;
    status)
    if kill -0 $js_pid &>/dev/null
    then
        echo -e "\njson-server running: pid $js_pid"
    else
        echo -e "\njson-server not running"
    fi
    ;;
    *)
    echo -e "\nsimpled.sh [start|stop|status]"
    ;;
esac

私のホスティングサーバーでこのスクリプトを実行しましたが、数日後にSSH接続が非常に遅くなり、デーモンを停止する必要がありました。私はこれがwhile trueループのためだと思います。

このスクリプトが時間の経過とともに多くのメモリを消費しないようにすることができますか?乾杯!

ベストアンサー1

おすすめ記事