QT SOLAR 愛島発電所
- 本日の発電量
- 1729 kWh
- 現在の日射量
- 0 Wh/㎡
- 現在の外気温
- 3.4 ℃
(2024/12/10 23:34 更新)
QT SOLAR 愛島発電所
(2024/12/10 23:34 更新)
QT SOLAR 下増田発電所
(2024/12/10 23:31 更新)
QT SOLAR 北原東発電所
(2024/12/10 23:19 更新)
QT SOLAR 長久良辺発電所
(2024/12/10 23:13 更新)
QT SOLAR 白坂発電所
(2024/12/10 23:35 更新)
QT SOLAR 清水沢発電所
(2024/12/10 23:15 更新)
指定したデーモンが起動していなければ起動させるシェルスクリプトデーモンです。サーバー起動時はもちろん、なんらかの要因で指定したデーモンが落ちてしまった場合も、再起動を試みます。
Perlスクリプトで書いたデーモンでは、ちょっとしたエラーの発生で落ちることのないよう例外処理による対策をしました。
しかしながら、それでも落ちてしまう場合もあります。そこで、落ちていたら再起動させるシェルスクリプトを用意してみます。
シェルスクリプトの機能は次の通り。
dcd.sh
#! /bin/sh # dcd : Daemon Controller Daemon processName=/home/your-account/your-daemon.pl while true do isExist=`ps aux | grep "$processName" | grep -v grep | wc -l` if [ $isExist = 1 ] then : else $processName fi sleep 60 done
試す場合。
sh ./dcd.sh &
実行権限を与えればsh
不要。
chmod 755 ./dcd.sh ./dcd.sh &
このシェルスクリプトを、start-stop-daemonを使った起動シェルスクリプトで自動起動させます。
ひな形があるのでコピーしてそれを編集します。実行権限も与えます。
$ sudo cp /etc/init.d/skeleton /etc/init.d/dcd $ sudo chmod 755 /etc/init.d/dcd $ sudo vi /etc/init.d/skeleton /etc/init.d/dcd
複数ファイルを開いていますが、ファイル間の移動はn
とN
を使います。
変更は以下の通り。変更した行のみ記載してます。
NAME=dcd DAEMON=/home/your-account/$NAME.sh #DAEMON_ARGS="--options args" start-stop-daemon --start --quiet --pidfile $PIDFILE --make-pidfile --background --exec $DAEMON \ || return 2 echo "Usage: $SCRIPTNAME {start|stop|status|restart}" >&2
ランレベルを設定しておきます。
$ sudo sysv-rc-conf
サーバーを再起動して確かめてみましょう。
$ service dcd status * dcd is running
Perlスクリプトで書いたデーモンも起動しているか確認してみましょう。
ps aux | grep your-daemon.pl root 1430 0.0 0.1 140948 15676 ? S 16:56 0:00 /usr/bin/perl /home/your-account/your-daemon.pl
こちらも起動していますね。
さらに、試しにこのPerlスクリプトで書いたデーモンプロセスをKILLしてみると、1分以内にプロセスが再び生成されることが確認できます。
Perlスクリプトで書いた複数のデーモンプロセスを監視する場合は、こんな感じにすれば良いと思います。
mdcd.sh
#!/bin/bash # Notice: sh -> dash in case of Ubuntu # mdcd : Multi Daemon Controller Daemon ver 1.0 processNameArray=( \ /home/your-acccount/your-daemon1.pl \ /home/your-acccount/your-daemon2.pl \ /home/your-acccount/your-daemon3.pl \ ) while true do for processName in ${processNameArray[@]} do isExist=`ps aux | grep "$processName" | grep -v grep | wc -l` if [ $isExist = 1 ] then : else $processName fi done sleep 60 done
どうということもないのですが、Ubuntuで配列を使うときのシェルはbashを使うようにして下さい。
#!/bin/bash
これです、1行目のアレです、シェバン (shebang) です。
$ ls -l /bin lrwxrwxrwx 1 root root 4 Jan 23 2015 sh -> dash
shの実体はdashになっています。dashは軽量高速シェルですが、bashのような配列をサポートしていません。
あえてsh(dash)を使うとこうなります。
$ sh mdcd.sh mdcd.sh: 6: mdcd.sh: Syntax error: "(" unexpected
配列を使わなければいいという話もあります。
宮城県仙台市太白区長町一丁目2-11
[運営者]
[発電所]
本ウェブサイト上のQT SOLAR 発電所は、グループ会社の発電所も含まれます。