App-timestamp
view release on metacpan or search on metacpan
#!/usr/bin/perl
use 5.011 ;
use strict ;
use warnings ;
use autodie qw[ open ] ;
use Fcntl qw[ :DEFAULT :flock :seek] ;
use Getopt::Std ; getopts 'ab:d:sw:z:' , \my %o ;
use POSIX qw [ strftime ] ;
use Time::HiRes qw[ sleep gettimeofday tv_interval ] ;
use Time::Local qw[ timegm ] ; # ã¿ã¤ã ã¾ã¼ã³ãã¨ã«ç°ãªãæå·®ãç®åºãããã
& HELP_MESSAGE if @ARGV == 0 ;
my $H = $o{b} // '=== ' ; # åºåããæ¥ææ
å ±ã®å
é ã«ä»å ããæåå
my $od0 = 0 eq ( $o{d} // '' ) ; # opt_d0
my $ow0 = 0 eq ( $o{w} // '' ) ; # opt_w0
my $oz0 = 0 eq ( $o{z} // '' ) ; # opt_z0
my @wday = qw[ sun mon tue wed thu fri sat ] ; # 7åã®å¤ã¯å¿
ãæåæ°(ãã¤ãæ°)ã¯ä¸å®ã¨ãããã¨ã
my $zone = $oz0 ? '' : do { my $d = timegm(localtime)-timegm(gmtime) ; sprintf '%+03d:%02d', $d/3600, $d/60 % 60 } ;
my $dfmt = $od0 ? '' : '%Y-%m-%d ' ; # stfrtime ã«æ¸¡ãæ¥ä»ã®é¨å
my $fmt = $o{s} ? "$dfmt%H:%M:%S$zone" : "$dfmt%H:%M$zone" ;
my $DTSTR = do { my @T = localtime ; my $w = $ow0 ? '' : "($wday[$T[6]])"; $H . strftime( $fmt , @T ) . $w } ;
my $LEN = 1 + length $DTSTR ; # 1 ã¯æ¹è¡æåã®åã®1ãã¤ãã
sysopen my $FH , $ARGV[0] , O_RDWR | O_CREAT or die ; # +>> ã ã¨ãæå¾ã®ä½ç½®ã«èªã¿æ¸ããããã¨ã宣è¨ã
my $sflg = 0 ; # ã¹ãªã¼ããã©ã°
until ( flock $FH , LOCK_SH | LOCK_NB ) { sleep 0.25 ; $sflg = 1 } ; # æ¸è¾¼ã¿ããã¯(ãããã¯ç¡ã)
sleep 0.25 if $sflg -- ;
flock $FH , LOCK_SH ;
if (
! $o{a} && sysseek $FH , -2 * $LEN , SEEK_END
and do { sysread $FH , my $s1 , 2 * $LEN ; my $s2 = substr $s1 , $LEN , $LEN , '' ;
$s1 =~ m/^\Q$H\E.*:.*\n$/ && $s2 =~ m/^\Q$H\E.*:.*\n$/ }
and do { my $t = sysseek $FH , -1 , SEEK_CUR ; $t ? do { sysread $FH , my $c , 1 ; $c eq "\n" } : 1 }
) { sysseek $FH , -$LEN , SEEK_END } else { sysseek $FH , 0, SEEK_END }
#my $flg = ! $o{a} && sysseek $FH , -2 * $LEN , 2 ;
#$flg = 0 unless do { my $t = sysseek $FH , -1 , 1 ; $t ? do { sysread $FH , my $c , 1 ; say "\$c='$c'" ;$c eq "\n" } : 1 } ;
#sysread $FH , my $s1 , 2 * $LEN ;
#my $s2 = substr $s1 , $LEN , $LEN , '' ;
#$flg = 0 unless $s1 =~ m/^\Q$H\E.*:.*\n$/ && $s2 =~ m/^\Q$H\E.*:.*\n$/ ;
#$flg ? sysseek $FH , -$LEN , 1 : sysseek $FH , 0, 2 ;
#my $fp = (stat($FH))[2] ; say $fp ;chmod 000, $FH ; $FH->flush ;
print $FH "$DTSTR\n" ; # flock $FH , LOCK_UN ;
#$FH->flush ;chmod $fp, $FH ;
#sleep 5 ;
close $FH ;
## ãã«ãã®æ±ã
sub VERSION_MESSAGE {}
sub HELP_MESSAGE {
use FindBin qw[ $Script ] ;
$ARGV[1] //= '' ; # options ã¨ããæååã®ä»»æã®å
é é¨åãå«ã¾ãã¦ãããã©ãããå¾ã§å¤å®ããã
open my $FH , '<' , $0 ; # ãã®ããã°ã©ã ãã¡ã¤ã«èªä½ãéãã¦ã=head1ãã=cutã¾ã§ããã«ãã®æé¢ã¨ãã¦åºåããã
while(<$FH>){
s/\$0/$Script/g ;
print $_ if s/^=head1// .. s/^=cut// and $ARGV[1] =~ /^o(p(t(i(o(ns?)?)?)?)?)?$/i ? m/^\s+\-/ : 1;
}
close $FH ;
exit 0 ;
}
=encoding utf8
=head1
$0 FILE
- FILE㯠/dev/stdout ãæå®å¯è½ã§ããã
弿°ã§ä¸ãããããã¡ã¤ã«FILE(ä½ãã®ãã°ãã¡ã¤ã«ãæ³å®)ã«ã次ã®ãããªè¡ãæ«å°¾ã«ä»å ããã
1. ãã®æç¹ã®æ¥æã表ãæååããã¨ãã°ã=== 2022-02-03 14:55+09:00(wed)ãã
2. ãã®ãã¡ã¤ã«FILEã®æ«å°¾ã®2è¡ãããã®ããã°ã©ã $0ã追å ããã¨å¤æãããå ´åã«ã¯ã
ãã®ãã¡ã¤ã«FILEã®æ«å°¾ã®1è¡ã®ã¿ãããã®æç¹ã®æ¥æã表ãæååã§ç½®ãæããã
ä¸è¨ã®ããã«ããã°ã©ã $0ãå復å®è¡ããããã¨ã§(cronçãç¨ãã)ã
ä½ãã®ãã°ãã¡ã¤ã«ã§ããFILEã¯æ¬¡ã®æ§ã«ãªããã©ã®æç¹ã§æ¸ãè¾¼ã¾ããã®ãåããå®ããªãã
- LOGFILEã«å¥ã®ããã°ã©ã ã®å®è¡çµæãéææ¸ãè¾¼ã¾ãã¦ããã¨ããã
- æ¯å cronã§ $0 LOGFILE ãå®è¡ãã¦ããã¨ããã
- ããã¨ãéæLOGFILEã«æ¸ãè¾¼ã¾ããåè¡L1ã®1è¡åL0ã¨1è¡å¾L2ã«ãcronã«ããèµ·åããã$0ã
æ¥ææ
å ±ãæ¸ãè¾¼ã¾ãã¦ããã®ã§ãL1ã®æ¸è¾¼æ¥æã¯ãL0ã¨L2ã«æ¸ããã2åã®æ¥æã®éã ã¨å¤æããã
ãªãã·ã§ã³:
-a : ä¸è¨ã®2.ã®å¤æããã¦å®è¡ããããã¨ã¯ãããåç´ã«æ¥ææååãæ¸ãè¶³ãã
-b STR : æ¥ææ
å ±ã®å
é ã«ä»å ããæååãæå®ç¡ãã®å ´åã¯ã=== ãã®4æåã
-d 0 : æ¥ææ
å ±ã®å
ãæ¥ä»ãåºããªããæ¥ä»ããä¸ã®æå»æ
å ±ã®ã¿ã«ãªãã
-s : æ¥ææ
å ±ãç§åä½ã«ããããã®ãªãã·ã§ã³ãç¡ãå ´åã¯ãååä½ã
-w 0 : ææ¥ãåºåããªãã
-z 0 : æå·®æ
å ±(ä¾ +09:00) ãåºåããªãã
å
é¨åä½ã®ã¡ã¢ :
+ ãã®ããã°ã©ã ãå¤éèµ·åãããå ´åãæ³å®ãã¦ããã¡ã¤ã«ããã¯ãæããããã¡ã¤ã«ããã¯ã
æ¤åºãããã0.25ç§éå¾
ã¤ã
+ æå¾ã®2è¡ã®æååã®æ¤æ»ã¯ã簡便ã§ããããã¤ãæ°ã¨æååã®å
é ã®ä¸è´ã¨ã³ãã³ã®åå¨ã®ã¿ãã
調ã¹ã¦ããªããå¾ã£ã¦ãå¶ç¶ã¾ãã¯å·§å¦ãªãããã«ãã£ã¦ãæå³ããªã(ãã®ããã°ã©ã ãæ³å®ããªã)
åä½ãããããã¨ãå¯è½ã§ããã(å¾ã£ã¦ã-aã¨ãããªãã·ã§ã³ãä½ã£ãã)
( run in 2.883 seconds using v1.01-cache-2.11-cpan-39bf76dae61 )