View file File name : ntp-wait Content :#! /usr/bin/perl package ntp_wait; use 5.006_000; use strict; use warnings; use lib "/usr/share/ntp/lib"; use NTP::Util qw(ntp_read_vars); exit run(@ARGV) unless caller; sub run { my $opts; if (!processOptions(\@_, $opts)) { usage(1); }; my $tries = $opts->{tries}; # How many tries before we give up? (10 min+) my $sleep = $opts->{sleep}; # Seconds to sleep between tries (6s = 10/min) my $verbose = $opts->{verbose}; # Be verbose? # Autoflush stdout $| = 1; print "Waiting for ntpd to synchronize... " if $verbose; for my $i (1 .. $tries) { my $info = ntp_read_vars(0, []); if (!defined $info) { print "\bntpd is not running!\n" if $verbose; return 1; } if (!exists $info->{status_line}{leap}) { print "\bLeap status not available\n"; return 1; } my $leap = $info->{status_line}{leap}; my $sync = $info->{status_line}{sync}; if ($leap =~ /(sync|leap)_alarm/) { print "\b".(substr "*+:.", $i % 4, 1) if $verbose; sleep $sleep if $i < $tries; next; } if ($leap =~ /leap_(none|((add|del)_sec))/) { # We could check $sync here to make sure we like the source... print "\bOK!\n" if $verbose; return 0; } print "\bUnexpected 'leap' status <$leap>\n"; return 1; } print "\bNo!\nntpd did not synchronize.\n" if $verbose; return 1; } # EDIT THIS FILE WITH CAUTION (ntp-wait-opts) # # It has been AutoGen-ed August 14, 2018 at 08:09:02 AM by AutoGen 5.18.5 # From the definitions ntp-wait-opts.def # and the template file perlopt use Getopt::Long qw(GetOptionsFromArray); Getopt::Long::Configure(qw(no_auto_abbrev no_ignore_case_always)); my $usage; sub usage { my ($ret) = @_; print STDERR $usage; exit $ret; } sub paged_usage { my ($ret) = @_; my $pager = $ENV{PAGER} || '(less || more)'; open STDOUT, "| $pager" or die "Can't fork a pager: $!"; print $usage; exit $ret; } sub processOptions { my $args = shift; my $opts = { 'tries' => '100', 'sleep' => '6', 'verbose' => '', 'help' => '', 'more-help' => '' }; my $argument = ''; my $ret = GetOptionsFromArray($args, $opts, ( 'tries|n=i', 'sleep|s=i', 'verbose|v', 'help|?', 'more-help')); $usage = <<'USAGE'; ntp-wait - Wait for ntpd to stabilize the system clock - Ver. 4.2.8p12 USAGE: ntp-wait [ -<flag> [<val>] | --<name>[{=| }<val>] ]... -n, --tries=num Number of times to check ntpd -s, --sleep=num How long to sleep between tries -v, --verbose Be verbose -?, --help Display usage information and exit --more-help Pass the extended usage text through a pager Options are specified by doubled hyphens and their name or by a single hyphen and the flag character. USAGE usage(0) if $opts->{'help'}; paged_usage(0) if $opts->{'more-help'}; $_[0] = $opts; return $ret; } END { close STDOUT }; 1; __END__