私は、以下のコマンドを使用して、自分のサーバー上でスクリプトを1つ実行するようにしています。私は毎分これを実行するためにcronジョブを持っています。Linuxシングルインスタンスが長時間実行されない場合は終了します
How do I daemonize an arbitrary script in unix?
#!/bin/bash
if [[ $# < 1 ]]; then
echo "Name of pid file not given."
exit
fi
# Get the pid file's name.
PIDFILE=$1
shift
if [[ $# < 1 ]]; then
echo "No command given."
exit
fi
echo "Checking pid in file $PIDFILE."
#Check to see if process running.
PID=$(cat $PIDFILE 2>/dev/null)
if [[ $? = 0 ]]; then
ps -p $PID >/dev/null 2>&1
if [[ $? = 0 ]]; then
echo "Command $1 already running."
exit
fi
fi
# Write our pid to file.
echo $$ >$PIDFILE
# Get command.
COMMAND=$1
shift
# Run command
$COMMAND "$*"
今、私は私のスクリプトが何らかの理由でハングアップしていたので、それが立ち往生していることが分かりました。私は、$PIDFILE
が "古い"かどうかをチェックし、もしそうなら、プロセスを終了させる方法を欲しいと思います。私はそれが可能であることを知っている(ファイルのタイムスタンプをチェックする)が、私は構文を知らないか、これは良い考えでもある場合。また、このスクリプトが実行されているときは、CPUをかなり使用する必要があります。ハングアップする(まれに、少なくとも1回はこれまでに発生した)場合、CPU使用率は0%に低下します。プロセスが本当に停止/非アクティブであることを確認できればうれしいですが、簡単な方法があるかどうかわかりません(そして、私はそれが殺されるところで多くの誤認を望んでいませんが、うまく走っている)。
bashスクリプト(例えば、 "$ *" 'vs' "$ @" ')については十分に分かっていないので、最初にコマンドを実行したときになぜ奇妙なエラーが発生したのか理解しています。タイムアウトは私が望むように見えます。 – Matt