* Renamed tools/anvil-reboot-needed to tools/anvil-manage-power and started adding support for rebooting and powering off to it.
* Created the Anvil::Tools::Jobs module to handle general job processing task. Moved 'update_progress' from tools/anvil-update-system to it and generalized it. * Added some missing CDATA wrappers to the words XML file strings with '>' in it. Signed-off-by: Digimer <digimer@alteeve.ca>main
parent
962ff89fc5
commit
545f9a9bb5
10 changed files with 563 additions and 207 deletions
@ -0,0 +1,279 @@ |
||||
package Anvil::Tools::Job; |
||||
# |
||||
# This module contains methods used in job handling |
||||
# |
||||
|
||||
use strict; |
||||
use warnings; |
||||
use Data::Dumper; |
||||
use Scalar::Util qw(weaken isweak); |
||||
|
||||
our $VERSION = "3.0.0"; |
||||
my $THIS_FILE = "Job.pm"; |
||||
|
||||
### Methods; |
||||
# |
||||
|
||||
=pod |
||||
|
||||
=encoding utf8 |
||||
|
||||
=head1 NAME |
||||
|
||||
Anvil::Tools::Job |
||||
|
||||
Provides methods related to (background) job handling. |
||||
|
||||
=head1 SYNOPSIS |
||||
|
||||
use Anvil::Tools; |
||||
|
||||
# Get a common object handle on all Anvil::Tools modules. |
||||
my $anvil = Anvil::Tools->new(); |
||||
|
||||
# ... |
||||
|
||||
=head1 METHODS |
||||
|
||||
Methods in this module; |
||||
|
||||
=cut |
||||
sub new |
||||
{ |
||||
my $class = shift; |
||||
my $self = { |
||||
JOB => { |
||||
LANGUAGE => "", |
||||
}, |
||||
}; |
||||
|
||||
bless $self, $class; |
||||
|
||||
return ($self); |
||||
} |
||||
|
||||
# Get a handle on the Anvil::Tools object. I know that technically that is a sibling module, but it makes more |
||||
# sense in this case to think of it as a parent. |
||||
sub parent |
||||
{ |
||||
my $self = shift; |
||||
my $parent = shift; |
||||
|
||||
$self->{HANDLE}{TOOLS} = $parent if $parent; |
||||
|
||||
# Defend against memory leads. See Scalar::Util'. |
||||
if (not isweak($self->{HANDLE}{TOOLS})) |
||||
{ |
||||
weaken($self->{HANDLE}{TOOLS});; |
||||
} |
||||
|
||||
return ($self->{HANDLE}{TOOLS}); |
||||
} |
||||
|
||||
|
||||
############################################################################################################# |
||||
# Public methods # |
||||
############################################################################################################# |
||||
|
||||
=head2 update_progress |
||||
|
||||
This updates the progress if we were called with a job UUID. |
||||
|
||||
This also sets C<< sys::last_update >>, allowing you to see how long it's been since the progress was last updated and trigger an update on a time based counter. |
||||
|
||||
Returns C<< 0 >> on success, C<< 1 >> on failure. |
||||
|
||||
B<< Note >>: Some special C<< job_status >> processing is done to support some specific callers. These should not impact generic calls of this method. |
||||
|
||||
Parameters; |
||||
|
||||
=head3 job_uuid (optional, default 'jobs::job_uuid') |
||||
|
||||
This is the UUID of the job to update. If it isn't set, but C<< jobs::job_uuid >> is set, it will be used. If that is also not set, |
||||
|
||||
=head3 message (optional) |
||||
|
||||
If set, this message will be appended to C<< job_status >>. If set to 'C<< clear >>', previous records will be removed. |
||||
|
||||
=head3 progress (required) |
||||
|
||||
This is a number to set the current progress to. |
||||
|
||||
=cut |
||||
sub update_progress |
||||
{ |
||||
my $self = shift; |
||||
my $parameter = shift; |
||||
my $anvil = $self->parent; |
||||
my $debug = defined $parameter->{debug} ? $parameter->{debug} : 3; |
||||
|
||||
my $salt = ""; |
||||
my $job_uuid = defined $parameter->{job_uuid} ? $parameter->{job_uuid} : ""; |
||||
my $message = defined $parameter->{message} ? $parameter->{message} : ""; |
||||
my $progress = defined $parameter->{progress} ? $parameter->{progress} : ""; |
||||
$anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => $debug, list => { |
||||
progress => $progress, |
||||
message => $message, |
||||
job_uuid => $job_uuid, |
||||
"jobs::job_uuid" => $anvil->data->{jobs}{job_uuid}, |
||||
}}); |
||||
|
||||
$anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => $debug, list => { job_uuid => $job_uuid }}); |
||||
if ((not $job_uuid) && ($anvil->data->{jobs}{job_uuid})) |
||||
{ |
||||
$job_uuid = $anvil->data->{jobs}{job_uuid}; |
||||
$anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => $debug, list => { job_uuid => $job_uuid }}); |
||||
} |
||||
|
||||
# Exit if we still don't have a job_uuid |
||||
if (not $job_uuid) |
||||
{ |
||||
# Nothing we can do. |
||||
$anvil->Log->entry({source => $THIS_FILE, line => __LINE__, level => $debug, priority => "alert", key => "log_0207"}); |
||||
return(1); |
||||
} |
||||
|
||||
# Exit if we don't have a progress. |
||||
if ($progress eq "") |
||||
{ |
||||
$anvil->Log->entry({source => $THIS_FILE, line => __LINE__, level => 0, priority => "err", key => "log_0020", variables => { method => "Job->update_progress()", parameter => "progress" }}); |
||||
return(1); |
||||
} |
||||
|
||||
# Is the progress valid? |
||||
if (($progress =~ /\D/) or ($progress < 0) or ($progress > 100)) |
||||
{ |
||||
$anvil->Log->entry({source => $THIS_FILE, line => __LINE__, level => $debug, priority => "alert", key => "log_0209", variables => { progress => $progress }}); |
||||
return(1); |
||||
} |
||||
|
||||
# If 'sys::last_update' isn't set, set it now. |
||||
if (not defined $anvil->data->{sys}{last_update}) |
||||
{ |
||||
$anvil->data->{sys}{last_update} = time; |
||||
$anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => $debug, list => { "sys::last_update" => $anvil->data->{sys}{last_update} }}); |
||||
} |
||||
|
||||
# Get the current job_status and append this new one. |
||||
my $job_picked_up_by = $$; |
||||
my $job_picked_up_at = 0; |
||||
my $job_status = ""; |
||||
$anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => $debug, list => { message => $message, job_picked_up_by => $job_picked_up_by }}); |
||||
if ($message eq "clear") |
||||
{ |
||||
$job_picked_up_by = 0; |
||||
$anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => $debug, list => { job_picked_up_by => $job_picked_up_by }}); |
||||
} |
||||
else |
||||
{ |
||||
my $query = " |
||||
SELECT |
||||
job_status, |
||||
job_picked_up_at |
||||
FROM |
||||
jobs |
||||
WHERE |
||||
job_uuid = ".$anvil->data->{sys}{database}{use_handle}->quote($job_uuid)." |
||||
;"; |
||||
$anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => $debug, list => { query => $query }}); |
||||
|
||||
my $results = $anvil->Database->query({query => $query, source => $THIS_FILE, line => __LINE__}); |
||||
my $count = @{$results}; |
||||
$anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => $debug, list => { |
||||
results => $results, |
||||
count => $count, |
||||
}}); |
||||
|
||||
if (not $count) |
||||
{ |
||||
$anvil->Log->entry({source => $THIS_FILE, line => __LINE__, level => $debug, priority => "alert", key => "log_0208", variables => {job_uuid => $job_uuid}}); |
||||
return(1); |
||||
} |
||||
|
||||
$job_status = $results->[0]->[0]; |
||||
$job_picked_up_at = $results->[0]->[1]; |
||||
$job_status = "" if not defined $job_status; |
||||
$job_picked_up_at = 0 if not defined $job_picked_up_at; |
||||
$anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => $debug, list => { |
||||
job_status => $job_status, |
||||
job_picked_up_at => $job_picked_up_at, |
||||
}}); |
||||
|
||||
# Set that the job is now picked up if the progress is '1' or it 'job_picked_up_at' |
||||
# is not set yet. |
||||
if ((not $job_picked_up_at) or ($progress eq "1")) |
||||
{ |
||||
$job_picked_up_at = time; |
||||
$anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => $debug, list => { job_picked_up_at => $job_picked_up_at }}); |
||||
} |
||||
|
||||
$anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => $debug, list => { message => $message }}); |
||||
if (($message) && ($job_status)) |
||||
{ |
||||
$job_status .= "\n"; |
||||
} |
||||
if ($message) |
||||
{ |
||||
$job_status .= $message; |
||||
$anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => $debug, list => { job_status => $job_status }}); |
||||
} |
||||
} |
||||
|
||||
### NOTE: This is used by 'anvil-update-system'. |
||||
# Insert counts |
||||
if ($job_status =~ /message_0058/gs) |
||||
{ |
||||
my $downloaded = $anvil->data->{counts}{downloaded} ? $anvil->Convert->add_commas({number => $anvil->data->{counts}{downloaded}}) : 0; |
||||
my $installed = $anvil->data->{counts}{installed} ? $anvil->Convert->add_commas({number => $anvil->data->{counts}{installed}}) : 0; |
||||
my $verified = $anvil->data->{counts}{verified} ? $anvil->Convert->add_commas({number => $anvil->data->{counts}{verified}}) : 0; |
||||
my $lines = $anvil->data->{counts}{lines} ? $anvil->Convert->add_commas({number => $anvil->data->{counts}{lines}}) : 0; |
||||
$anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => $debug, list => { |
||||
"s1:counts::downloaded" => $anvil->data->{counts}{downloaded}, |
||||
"s2:downloaded" => $downloaded, |
||||
"s3:counts::installed" => $anvil->data->{counts}{installed}, |
||||
"s4:installed" => $installed, |
||||
"s5:counts::verified" => $anvil->data->{counts}{verified}, |
||||
"s6:verified" => $verified, |
||||
"s7:counts::lines" => $anvil->data->{counts}{lines}, |
||||
"s8:lines" => $lines, |
||||
}}); |
||||
|
||||
$anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => $debug, list => { ">> job_status" => $job_status }}); |
||||
$job_status =~ s/message_0058,!!downloaded!.*?!!,!!installed!.*?!!,!!verified!.*?!!,!!lines!.*?!!/message_0058,!!downloaded!$downloaded!!,!!installed!$installed!!,!!verified!$verified!!,!!lines!$lines!!/sm; |
||||
$anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => $debug, list => { "<< job_status" => $job_status }}); |
||||
} |
||||
|
||||
my $query = " |
||||
UPDATE |
||||
jobs |
||||
SET |
||||
job_picked_up_by = ".$anvil->data->{sys}{database}{use_handle}->quote($job_picked_up_by).", |
||||
job_picked_up_at = ".$anvil->data->{sys}{database}{use_handle}->quote($job_picked_up_at).", |
||||
job_updated = ".$anvil->data->{sys}{database}{use_handle}->quote(time).", |
||||
job_progress = ".$anvil->data->{sys}{database}{use_handle}->quote($progress).", |
||||
job_status = ".$anvil->data->{sys}{database}{use_handle}->quote($job_status).", |
||||
modified_date = ".$anvil->data->{sys}{database}{use_handle}->quote($anvil->data->{sys}{database}{timestamp})." |
||||
WHERE |
||||
job_uuid = ".$anvil->data->{sys}{database}{use_handle}->quote($job_uuid)." |
||||
"; |
||||
$anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => $debug, list => { query => $query }}); |
||||
$anvil->Database->write({query => $query, source => $THIS_FILE, line => __LINE__}); |
||||
|
||||
# Note this update time |
||||
$anvil->data->{sys}{last_update} = time; |
||||
|
||||
return(0); |
||||
} |
||||
|
||||
|
||||
# =head3 |
||||
# |
||||
# Private Functions; |
||||
# |
||||
# =cut |
||||
|
||||
############################################################################################################# |
||||
# Private functions # |
||||
############################################################################################################# |
||||
|
||||
1; |
Binary file not shown.
Before Width: | Height: | Size: 22 KiB After Width: | Height: | Size: 24 KiB |
@ -0,0 +1,188 @@ |
||||
#!/usr/bin/perl |
||||
# |
||||
# This manages power on the host. It can set that a reboot is or is no longer required. It can also reboot or |
||||
# power off the machine. |
||||
# |
||||
# Examples; |
||||
# - Mark that a reboot is required - anvil-manage-power --reboot-needed 1 |
||||
# - Clear that a reboot is needed - anvil-manage-power --reboot-needed 0 |
||||
# - Report whether a reboot is needed or not - anvil-manage-power |
||||
# - Reboot the system - anvil-manage-power --reboot [-y] |
||||
# - Power the system off - anvil-manage-power --poweroff [-y] |
||||
# |
||||
# Exit codes; |
||||
# 0 = Normal exit. |
||||
# 1 = No database connections available. |
||||
# |
||||
# TODO: Don't reboot or power off until all external users are done with the database on this system (if |
||||
# applicable) |
||||
# |
||||
|
||||
use strict; |
||||
use warnings; |
||||
use Anvil::Tools; |
||||
|
||||
# Disable buffering |
||||
$| = 1; |
||||
|
||||
my $THIS_FILE = ($0 =~ /^.*\/(.*)$/)[0]; |
||||
my $running_directory = ($0 =~ /^(.*?)\/$THIS_FILE$/)[0]; |
||||
if (($running_directory =~ /^\./) && ($ENV{PWD})) |
||||
{ |
||||
$running_directory =~ s/^\./$ENV{PWD}/; |
||||
} |
||||
|
||||
my $anvil = Anvil::Tools->new({log_level => 2, log_secure => 1}); |
||||
|
||||
$anvil->Storage->read_config({file => "/etc/anvil/anvil.conf"}); |
||||
|
||||
# Read switches |
||||
$anvil->data->{switches}{'poweroff'} = ""; |
||||
$anvil->data->{switches}{'power-off'} = ""; |
||||
$anvil->data->{switches}{'reboot'} = ""; |
||||
$anvil->data->{switches}{'y'} = ""; |
||||
$anvil->data->{switches}{'yes'} = ""; |
||||
$anvil->data->{switches}{'reboot-needed'} = ""; |
||||
$anvil->Get->switches; |
||||
|
||||
if ($anvil->data->{switches}{'power-off'}) |
||||
{ |
||||
$anvil->data->{switches}{'poweroff'} = 1; |
||||
} |
||||
if ($anvil->data->{switches}{'yes'}) |
||||
{ |
||||
$anvil->data->{switches}{'y'} = 1; |
||||
} |
||||
|
||||
# Connect to DBs. |
||||
$anvil->Database->connect; |
||||
$anvil->Log->entry({source => $THIS_FILE, line => __LINE__, level => 3, secure => 0, key => "log_0132"}); |
||||
if (not $anvil->data->{sys}{database}{connections}) |
||||
{ |
||||
# No databases, exit. |
||||
print $anvil->Words->string({key => "error_0003"})."\n"; |
||||
$anvil->Log->entry({source => $THIS_FILE, line => __LINE__, level => 0, secure => 0, key => "error_0003"}); |
||||
$anvil->nice_exit({exit_code => 1}); |
||||
} |
||||
|
||||
# Are we being asked to reboot or power off? |
||||
if ($anvil->data->{switches}{'reboot'}) |
||||
{ |
||||
# Did the user confirm? |
||||
if ($anvil->data->{switches}{'reboot'} =~ /^y/i) |
||||
{ |
||||
do_reboot($anvil); |
||||
} |
||||
else |
||||
{ |
||||
# Not yet, ask to confirm. |
||||
print $anvil->Words->string({key => "message_0059"})." "; |
||||
my $answer = <STDIN>; |
||||
chomp($answer); |
||||
if ($answer =~ /^y/i) |
||||
{ |
||||
do_reboot($anvil); |
||||
} |
||||
else |
||||
{ |
||||
# Abort and exit. |
||||
print $anvil->Words->string({key => "message_0061"})."\n"; |
||||
$anvil->nice_exit({exit_code => 0}); |
||||
} |
||||
} |
||||
} |
||||
if ($anvil->data->{switches}{'poweroff'}) |
||||
{ |
||||
# Did the user confirm? |
||||
if ($anvil->data->{switches}{'poweroff'} =~ /^y/i) |
||||
{ |
||||
do_poweroff($anvil); |
||||
} |
||||
else |
||||
{ |
||||
# Not yet, ask to confirm. |
||||
print $anvil->Words->string({key => "message_0060"})." "; |
||||
my $answer = <STDIN>; |
||||
chomp($answer); |
||||
if ($answer =~ /^y/i) |
||||
{ |
||||
do_poweroff($anvil); |
||||
} |
||||
else |
||||
{ |
||||
# Abort and exit. |
||||
print $anvil->Words->string({key => "message_0061"})."\n"; |
||||
$anvil->nice_exit({exit_code => 0}); |
||||
} |
||||
} |
||||
} |
||||
|
||||
my $reboot_needed = $anvil->System->reboot_needed({debug => 2}); |
||||
$anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => { reboot_needed => $reboot_needed }}); |
||||
|
||||
$anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => { "switches::reboot-needed" => $anvil->data->{switches}{'reboot-needed'} }}); |
||||
if ($anvil->data->{switches}{'reboot-needed'} eq "1") |
||||
{ |
||||
# Enable |
||||
if (not $reboot_needed) |
||||
{ |
||||
$reboot_needed = $anvil->System->reboot_needed({debug => 2, set => 1}); |
||||
$anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => { reboot_needed => $reboot_needed }}); |
||||
print $anvil->Words->string({key => "message_0048"})."\n"; |
||||
} |
||||
else |
||||
{ |
||||
# Was already set, do nothing |
||||
print $anvil->Words->string({key => "message_0049"})."\n"; |
||||
} |
||||
} |
||||
elsif ($anvil->data->{switches}{'reboot-needed'} eq "0") |
||||
{ |
||||
# Disabled |
||||
if ($reboot_needed) |
||||
{ |
||||
$reboot_needed = $anvil->System->reboot_needed({debug => 2, set => 0}); |
||||
$anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => { reboot_needed => $reboot_needed }}); |
||||
print $anvil->Words->string({key => "message_0050"})."\n"; |
||||
} |
||||
else |
||||
{ |
||||
# Was already disabled, do nothing |
||||
print $anvil->Words->string({key => "message_0051"})."\n"; |
||||
} |
||||
} |
||||
elsif ($anvil->data->{switches}{'reboot-needed'}) |
||||
{ |
||||
# Bad call |
||||
print $anvil->Words->string({key => "message_0052", variables => { program => $THIS_FILE }})."\n"; |
||||
} |
||||
|
||||
# Get the current state |
||||
if ($reboot_needed) |
||||
{ |
||||
# Report that we're in mainteance mode |
||||
print $anvil->Words->string({key => "message_0053"})."\n"; |
||||
} |
||||
else |
||||
{ |
||||
# Report that we're not. |
||||
print $anvil->Words->string({key => "message_0054"})."\n"; |
||||
} |
||||
|
||||
# We're done |
||||
$anvil->nice_exit({exit_code => 0}); |
||||
|
||||
|
||||
############################################################################################################# |
||||
# Private functions. # |
||||
############################################################################################################# |
||||
|
||||
# This does a reboot, clearing the flag indicating a reboot is required in the process. |
||||
sub do_reboot |
||||
{ |
||||
my ($anvil) = @_; |
||||
|
||||
|
||||
|
||||
$anvil->nice_exit({exit_code => 0}); |
||||
} |
@ -1,101 +0,0 @@ |
||||
#!/usr/bin/perl |
||||
# |
||||
# This set, clear and report if the host needs to be rebooted. |
||||
# |
||||
# Examples; |
||||
# - Enable - anvil-reboot-needed --set 1 |
||||
# - Disable - anvil-reboot-needed --set 0 |
||||
# - Report - anvil-reboot-needed |
||||
# |
||||
# Exit codes; |
||||
# 0 = Normal exit. |
||||
# 1 = No database connections available. |
||||
|
||||
use strict; |
||||
use warnings; |
||||
use Anvil::Tools; |
||||
|
||||
# Disable buffering |
||||
$| = 1; |
||||
|
||||
my $THIS_FILE = ($0 =~ /^.*\/(.*)$/)[0]; |
||||
my $running_directory = ($0 =~ /^(.*?)\/$THIS_FILE$/)[0]; |
||||
if (($running_directory =~ /^\./) && ($ENV{PWD})) |
||||
{ |
||||
$running_directory =~ s/^\./$ENV{PWD}/; |
||||
} |
||||
|
||||
my $anvil = Anvil::Tools->new({log_level => 2, log_secure => 1}); |
||||
|
||||
$anvil->Storage->read_config({file => "/etc/anvil/anvil.conf"}); |
||||
|
||||
# Read switches |
||||
$anvil->data->{switches}{set} = ""; |
||||
$anvil->Get->switches; |
||||
|
||||
# Connect to DBs. |
||||
$anvil->Database->connect; |
||||
$anvil->Log->entry({source => $THIS_FILE, line => __LINE__, level => 3, secure => 0, key => "log_0132"}); |
||||
if (not $anvil->data->{sys}{database}{connections}) |
||||
{ |
||||
# No databases, exit. |
||||
print $anvil->Words->string({key => "error_0003"})."\n"; |
||||
$anvil->Log->entry({source => $THIS_FILE, line => __LINE__, level => 0, secure => 0, key => "error_0003"}); |
||||
$anvil->nice_exit({exit_code => 1}); |
||||
} |
||||
|
||||
my $reboot_needed = $anvil->System->reboot_needed({debug => 2}); |
||||
$anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => { reboot_needed => $reboot_needed }}); |
||||
|
||||
$anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => { "switches::set" => $anvil->data->{switches}{set} }}); |
||||
if ($anvil->data->{switches}{set} eq "1") |
||||
{ |
||||
# Enable |
||||
if (not $reboot_needed) |
||||
{ |
||||
$reboot_needed = $anvil->System->reboot_needed({debug => 2, set => 1}); |
||||
$anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => { reboot_needed => $reboot_needed }}); |
||||
print $anvil->Words->string({key => "message_0048"})."\n"; |
||||
} |
||||
else |
||||
{ |
||||
# Was already set, do nothing |
||||
print $anvil->Words->string({key => "message_0049"})."\n"; |
||||
} |
||||
} |
||||
elsif ($anvil->data->{switches}{set} eq "0") |
||||
{ |
||||
# Disabled |
||||
if ($reboot_needed) |
||||
{ |
||||
$reboot_needed = $anvil->System->reboot_needed({debug => 2, set => 0}); |
||||
$anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => { reboot_needed => $reboot_needed }}); |
||||
print $anvil->Words->string({key => "message_0050"})."\n"; |
||||
} |
||||
else |
||||
{ |
||||
# Was already disabled, do nothing |
||||
print $anvil->Words->string({key => "message_0051"})."\n"; |
||||
} |
||||
} |
||||
elsif ($anvil->data->{switches}{set}) |
||||
{ |
||||
# Bad call |
||||
print $anvil->Words->string({key => "message_0052", variables => { program => $THIS_FILE }})."\n"; |
||||
} |
||||
|
||||
# Get the current state |
||||
|
||||
if ($reboot_needed) |
||||
{ |
||||
# Report that we're in mainteance mode |
||||
print $anvil->Words->string({key => "message_0053"})."\n"; |
||||
} |
||||
else |
||||
{ |
||||
# Report that we're not. |
||||
print $anvil->Words->string({key => "message_0054"})."\n"; |
||||
} |
||||
|
||||
# We're done |
||||
$anvil->nice_exit({exit_code => 0}); |
Loading…
Reference in new issue