diff options
Diffstat (limited to 'perl-install/printer/services.pm')
-rw-r--r-- | perl-install/printer/services.pm | 61 |
1 files changed, 61 insertions, 0 deletions
diff --git a/perl-install/printer/services.pm b/perl-install/printer/services.pm new file mode 100644 index 000000000..1b68da96a --- /dev/null +++ b/perl-install/printer/services.pm @@ -0,0 +1,61 @@ +package printer::services; + +use strict; +use services; +use run_program; + +sub restart ($) { + my ($service) = @_; + if (services::restart($service)) { + # CUPS needs some time to come up. + wait_for_cups() if $service eq "cups"; + return 1; + } else { return 0 } +} + +sub start ($) { + my ($service) = @_; + if (services::start($service)) { + # CUPS needs some time to come up. + wait_for_cups() if $service eq "cups"; + return 1; + } else { return 0 } +} + +sub start_not_running_service ($) { + my ($service) = @_; + # The exit status is not zero when the service is not running + if (services::start_not_running_service($service)) { + return 0; + } else { + run_program::rooted($::prefix, "/etc/rc.d/init.d/$service", "start"); + if (($? >> 8) != 0) { + return 0; + } else { + # CUPS needs some time to come up. + wait_for_cups() if $service eq "cups"; + return 1; + } + } +} + +sub wait_for_cups { + # CUPS needs some time to come up. Wait up to 30 seconds, checking + # whether CUPS is ready. + my $cupsready = 0; + my $i; + for ($i = 0; $i < 30; $i++) { + run_program::rooted($::prefix, "/usr/bin/lpstat", "-r"); + if (($? >> 8) != 0) { + # CUPS is not ready, continue + sleep 1; + } else { + # CUPS is ready, quit + $cupsready = 1; + last; + } + } + return $cupsready; +} + +1; |