#/usr/bin/perl -w

use Proc::Daemon;

our $DAEMON         = 1;      # デーモンにするか？: 1(オン) / 0 (オフ)
our $SLEEP_INTERVAL = 60;     # スリープの間隔（秒）

&init;
&run;

sub action {

    # ここにロジックを書く

    return 1;
}

sub interrupt {

    eval{ close(XXXXX);  };  # グローバルで開いているファイルがあれば、閉じる

    my $sig = shift; 
    setpgrp;                 # I *am* the leader 
    $SIG{$sig} = 'IGNORE';
    kill $sig, 0;            # death to all-comers
    die "killed by $sig"; 

    exit(0);
}

sub init {

    $SIG{INT}  = 'interrupt';         # Ctrl-C が押された場合
    $SIG{HUP}  = 'interrupt';         # HUP  シグナルが送られた場合
    $SIG{QUIT} = 'interrupt';         # QUIT シグナルが送られた場合
    $SIG{KILL} = 'interrupt';         # KILL シグナルが送られた場合
    $SIG{TERM} = 'interrupt';         # TERM シグナルが送られた場合

    Proc::Daemon::Init if $DAEMON;   # as a daemon
}

sub run {

    while(1) {

        # SLEEP_INTERVAL ごとに action を呼び出す
        &action;

        sleep($SLEEP_INTERVAL);
    }
}

1;