#! /usr/bin/perl ################################################################################ # # Usage: restart_script # # This script is invoked by pbs_mom to restart a job. # ################################################################################ use strict; use Sys::Syslog; # Log levels: # 0 = none -- no logging # 1 = fail -- log only failures # 2 = info -- log invocations # 3 = debug -- log all subcommands my $logLevel = 3; logPrint(2, "Invoked: $0 " . join(' ', @ARGV) . "\n"); my ($sessionId, $jobId, $userId, $checkpointDir, $restartName); my $usage = "Usage: $0 \n"; if (@ARGV == 5) { ($sessionId, $jobId, $userId, $checkpointDir, $restartName) = @ARGV; } else { logDie(1, $usage); } # Change to the checkpoint directory where we want the checkpoint to be created chdir $checkpointDir or logDie(1, "Unable to cd to checkpoint dir ($checkpointDir): $!\n") if $logLevel; my $cmd = "cr_restart"; $cmd .= " $restartName"; my $output = `$cmd 2>&1`; my $rc = $? >> 8; logDie(1, "Subcommand ($cmd) failed with rc=$rc:\n$output") if $rc && $logLevel >= 1; logPrint(3, "Subcommand ($cmd) yielded rc=$rc:\n$output") if $logLevel >= 3; exit 0; ################################################################################ # logPrint($message) # Write a message (to syslog) and die ################################################################################ sub logPrint { my ($level, $message) = @_; my @severity = ('none', 'warning', 'info', 'debug'); return if $level > $logLevel; openlog('restart_script', '', 'user'); syslog($severity[$level], $message); closelog(); } ################################################################################ # logDie($message) # Write a message (to syslog) and die ################################################################################ sub logDie { my ($level, $message) = @_; logPrint($level, $message); die($message); }