愛島発電所

QT SOLAR 愛島発電所

本日の発電量
126 kWh
現在の日射量
217 Wh/㎡
現在の外気温
22.4 ℃

(2024/06/20 07:10 更新)

下増田発電所

QT SOLAR 下増田発電所

本日の発電量
14 kWh
現在の日射量
294 Wh/㎡
現在の外気温
26.4 ℃

(2024/06/20 07:19 更新)

北原東発電所

QT SOLAR 北原東発電所

本日の発電量
30 kWh
現在の日射量
428 Wh/㎡
現在の外気温
22.8 ℃

(2024/06/20 07:09 更新)

長久良辺発電所

QT SOLAR 長久良辺発電所

本日の発電量
30 kWh
現在の日射量
423 Wh/㎡
現在の外気温
22.6 ℃

(2024/06/20 07:12 更新)

白坂発電所

QT SOLAR 白坂発電所

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

(2024/06/20 07:18 更新)

清水沢発電所

QT SOLAR 清水沢発電所

本日の発電量
24 kWh
現在の日射量
448 Wh/㎡
現在の外気温
19.8 ℃

(2024/06/20 07:02 更新)

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秒待つことはありません。

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

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