221 lines
4.9 KiB
Plaintext
221 lines
4.9 KiB
Plaintext
|
#!/usr/bin/perl
|
||
|
# IBM(c) 2007 EPL license http://www.eclipse.org/legal/epl-v10.html
|
||
|
#(C)IBM Corp
|
||
|
|
||
|
#
|
||
|
|
||
|
BEGIN
|
||
|
{
|
||
|
$::XCATROOT =
|
||
|
$ENV{'XCATROOT'} ? $ENV{'XCATROOT'}
|
||
|
: -d '/opt/xcat' ? '/opt/xcat'
|
||
|
: '/usr';
|
||
|
}
|
||
|
use lib "$::XCATROOT/lib/perl";
|
||
|
use Getopt::Long;
|
||
|
use File::Basename;
|
||
|
use xCAT::MsgUtils;
|
||
|
use xCAT::Utils;
|
||
|
|
||
|
#-----------------------------------------------------------------------------
|
||
|
|
||
|
=head1 startstopxcatd
|
||
|
|
||
|
|
||
|
|
||
|
restartxcatd - this routine is used to restart the xcatd processes by
|
||
|
startsrc and stopsrc commands.
|
||
|
It runs on AIX.
|
||
|
|
||
|
=cut
|
||
|
|
||
|
#-----------------------------------------------------------------------------
|
||
|
# Main
|
||
|
my $cmd = basename($0);
|
||
|
if (!(xCAT::Utils->isAIX()))
|
||
|
{ # only runs on AIX
|
||
|
xCAT::MsgUtils->message("E", "This command should only be run on AIX.\n");
|
||
|
exit 1;
|
||
|
|
||
|
}
|
||
|
|
||
|
&parse_args($cmd);
|
||
|
|
||
|
my $rc;
|
||
|
my $cmd;
|
||
|
my @output;
|
||
|
my $inoperative = 0;
|
||
|
my $check_num;
|
||
|
|
||
|
# Check whether the xcatd subsystem has been created
|
||
|
$cmd = "/usr/bin/lssrc -s xcatd | grep \"xcatd Subsystem is not on file\"";
|
||
|
@output = `$cmd`;
|
||
|
if (@output) {
|
||
|
xCAT::MsgUtils->message("E", "Cannot find the xcatd subsystem on the Management Node.\n");
|
||
|
exit 1;
|
||
|
}
|
||
|
|
||
|
# Check the current status of xcatd subsystem
|
||
|
$cmd = "lssrc -s xcatd | grep 'xcatd' | grep 'inoperative'";
|
||
|
@output = `$cmd`;
|
||
|
if (scalar(@output)) {
|
||
|
xCAT::MsgUtils->message("I", "xcatd subsystem in inoperative status.\n");
|
||
|
$inoperative = 1;
|
||
|
}
|
||
|
|
||
|
if ($inoperative) {
|
||
|
# Kill xcatd if needed
|
||
|
$cmd = "ps -ef | grep xcatd | grep 'SSL listener'";
|
||
|
@output = `$cmd`;
|
||
|
foreach my $ps (@output) {
|
||
|
$ps =~ s/^\s+//; # strip any leading spaces
|
||
|
my ($uid, $pid, $ppid, $desc) = split /\s+/, $ps;
|
||
|
$cmd = "/usr/bin/kill -15 -$pid";
|
||
|
$rc = system($cmd);
|
||
|
if ($rc >> 8) {
|
||
|
xCAT::MsgUtils->message("E", "Cannot kill the xcatd processes correctly.\n");
|
||
|
exit 1;
|
||
|
}
|
||
|
}
|
||
|
$check_num = 10;
|
||
|
while ($check_num > 0) {
|
||
|
$check_num--;
|
||
|
@output = `$cmd`;
|
||
|
if (scalar(@output)) {
|
||
|
sleep 1;
|
||
|
} else {
|
||
|
last;
|
||
|
}
|
||
|
}
|
||
|
if ($check_num <= 0) {
|
||
|
xCAT::MsgUtils->message("E", "Cannot kill the xcatd processes correctly.\n");
|
||
|
exit 1;
|
||
|
}
|
||
|
} else {
|
||
|
# Stop the xcatd subsystem
|
||
|
$cmd = "/usr/bin/stopsrc -s xcatd";
|
||
|
$rc = system($cmd);
|
||
|
if ($rc >> 8) {
|
||
|
xCAT::MsgUtils->message("E", "Cannot run stopsrc command correctly.\n");
|
||
|
exit 1;
|
||
|
}
|
||
|
|
||
|
# Wait for end of the xcatd subsystem
|
||
|
$check_num = 10;
|
||
|
while ($check_num > 0) {
|
||
|
$check_num--;
|
||
|
$cmd = "lssrc -s xcatd | grep 'xcatd' | grep 'inoperative'";
|
||
|
@output = `$cmd`;
|
||
|
if (scalar(@output) == 0) {
|
||
|
sleep 1;
|
||
|
} else {
|
||
|
last;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
if ($check_num <= 0) {
|
||
|
xCAT::MsgUtils->message("E", "Cannot stop the xcatd subsystem correctly.\n");
|
||
|
exit 1;
|
||
|
} else {
|
||
|
xCAT::MsgUtils->message("I", "Stoped the xcatd subsystem.\n");
|
||
|
}
|
||
|
}
|
||
|
|
||
|
# Start the xcatd subsystem
|
||
|
$cmd = "/usr/bin/startsrc -s xcatd";
|
||
|
|
||
|
if ($ENV{XCATRELOAD} || $ENV{XCATROOT} || $ENV{PATH}) {
|
||
|
$cmd .= " -e \"";
|
||
|
if ($ENV{XCATRELOAD}) {
|
||
|
$cmd .= " XCATRELOAD=$ENV{XCATRELOAD}";
|
||
|
}
|
||
|
if ($ENV{XCATROOT}) {
|
||
|
$cmd .= " XCATROOT=$ENV{XCATROOT}";
|
||
|
}
|
||
|
if ($ENV{PATH}) {
|
||
|
$cmd .= " PATH=$ENV{PATH}";
|
||
|
}
|
||
|
$cmd .= "\"";
|
||
|
}
|
||
|
$rc = system($cmd);
|
||
|
if ($rc >> 8) {
|
||
|
xCAT::MsgUtils->message("E", "Cannot run startsrc command correctly.\n");
|
||
|
exit 1;
|
||
|
}
|
||
|
|
||
|
# Check the status of xcatd subsystem
|
||
|
$check_num = 10;
|
||
|
while ($check_num > 0) {
|
||
|
$check_num--;
|
||
|
$cmd = "lssrc -s xcatd | grep 'xcatd' | grep 'active'";
|
||
|
my @output = `$cmd`;
|
||
|
if (scalar(@output) == 0) {
|
||
|
sleep 1;
|
||
|
} else {
|
||
|
last;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
if ($check_num <= 0) {
|
||
|
xCAT::MsgUtils->message("E", "Cannot start the xcatd subsystem correctly.\n");
|
||
|
exit 1;
|
||
|
} else {
|
||
|
xCAT::MsgUtils->message("I", "Started the xcatd susbsystem.\n");
|
||
|
}
|
||
|
|
||
|
exit 0;
|
||
|
|
||
|
#-----------------------------------------------------------------------------
|
||
|
|
||
|
=head3 parse_args
|
||
|
|
||
|
Parses for input
|
||
|
|
||
|
=cut
|
||
|
|
||
|
#-----------------------------------------------------------------------------
|
||
|
|
||
|
my $usagemsg = "restartxcatd [-h|-v|-r]\n";
|
||
|
|
||
|
sub parse_args
|
||
|
{
|
||
|
my ($cmd) = @_;
|
||
|
my $msg;
|
||
|
my $usagemsg;
|
||
|
Getopt::Long::Configure("posix_default");
|
||
|
Getopt::Long::Configure("no_gnu_compat");
|
||
|
Getopt::Long::Configure("bundling");
|
||
|
if (
|
||
|
!GetOptions(
|
||
|
'h|help' => \$::HELP,
|
||
|
'r|reload' => \$::RELOAD,
|
||
|
'v|version' => \$::VERSION
|
||
|
|
||
|
)
|
||
|
)
|
||
|
{
|
||
|
xCAT::MsgUtils->message("E", $usagemsg);
|
||
|
exit 1;
|
||
|
}
|
||
|
if ($::HELP)
|
||
|
{
|
||
|
xCAT::MsgUtils->message("I", $usagemsg);
|
||
|
exit 0;
|
||
|
}
|
||
|
if ($::RELOAD)
|
||
|
{
|
||
|
$ENV{XCATRELOAD} = "yes";
|
||
|
}
|
||
|
if ($::VERSION)
|
||
|
{
|
||
|
my $version = xCAT::Utils->Version();
|
||
|
$version .="\n";
|
||
|
xCAT::MsgUtils->message("I", $version);
|
||
|
exit 0;
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
|
||
|
|