愛島発電所

QT SOLAR 愛島発電所

本日の発電量
304 kWh
現在の日射量
27 Wh/㎡
現在の外気温
15.0 ℃

(2024/05/20 11:03 更新)

下増田発電所

QT SOLAR 下増田発電所

本日の発電量
34 kWh
現在の日射量
61.3 Wh/㎡
現在の外気温
15.9 ℃

(2024/05/20 11:06 更新)

北原東発電所

QT SOLAR 北原東発電所

本日の発電量
50 kWh
現在の日射量
83 Wh/㎡
現在の外気温
15.5 ℃

(2024/05/20 11:00 更新)

長久良辺発電所

QT SOLAR 長久良辺発電所

本日の発電量
59 kWh
現在の日射量
78 Wh/㎡
現在の外気温
16.7 ℃

(2024/05/20 10:51 更新)

白坂発電所

QT SOLAR 白坂発電所

本日の発電量
59 kWh
現在の日射量
51 Wh/㎡
現在の外気温
17.1 ℃

(2024/05/20 10:58 更新)

清水沢発電所

QT SOLAR 清水沢発電所

本日の発電量
58 kWh
現在の日射量
76 Wh/㎡
現在の外気温
16.0 ℃

(2024/05/20 11:00 更新)

Daemon[fork編] | Perlで作るサーバーサービス

PerlでDaemonを実装します。forkを使った方法となります。

デーモンとしての体裁を整えるには、ざっとこんな感じになります。

  • 標準ストリーム(入力・出力・エラー)を破棄する。
  • 開始時と終了時にログを残す。
  • エラー発生時にエラーログを残し、プロセスは続行させる。
  • ターミナルから制御を切り離す。
  • 終了 (termination) シグナルを受けて終了する。

telemetry.pl

#!/usr/bin/perl
use POSIX;
$isSIGTERM = "";
$SIG{'TERM'} = sub {
$isSIGTERM="true";
};
fork and exit;
POSIX::setsid();
fork and exit;
umask 0;
chdir '/';
open STDIN , '<', '/dev/null';
open STDOUT, '>', '/dev/null';
open STDERR, '>', '/dev/null';
open LOG, '>>', '/home/your-account/telemetry.log';
print LOG "Telemetry System is started at ".localtime."\n";
close LOG;
while(!$isSIGTERM){
eval {
# Your operations here.
$a=1/0;
};
if($@){
open ERRLOG, '>>', '/home/your-account/telemetry.err';
print ERRLOG "An error has occurred at ".localtime." as follows:\n -> ".$@;
close ERRLOG;
}
sleep(10);
}
open LOG, '>>', '/home/your-account/telemetry.log';
print LOG "Telemetry System is stopped at ".localtime."\n";
close LOG;
exit;

SIGTERMを受け取ると、sleepはすぐに戻ってくるようになるので、遅滞なく終了することが出来ます。要は再起動するときに10秒待つことはありません。

この他、以下の事項についても検討すると良いです。

  • 二重起動の抑止
  • ログのローテーション