D7net
Home
Console
Upload
information
Create File
Create Folder
About
Tools
:
/
scripts
/
Filename :
setup_systemd_timer_for_plugins
back
Copy
#!/usr/local/cpanel/3rdparty/bin/perl # Copyright 2025 WebPros International, LLC # All rights reserved. # copyright@cpanel.net http://cpanel.net # This code is subject to the cPanel license. Unauthorized copying is prohibited. package scripts::setup_systemd_timer_for_plugins; use cPstrict; use Cpanel::SafeRun::Object (); use Cpanel::Imports (); use parent qw( Cpanel::HelpfulScript ); use constant SYSTEMCTL_BINARY => '/usr/bin/systemctl'; use constant _OPTIONS => ( 'app_name=s', 'method=s', 'verbose!' ); my $verbose = 0; =encoding utf-8 =head1 NAME setup_systemd_timer_for_plugins =head1 USAGE setup_systemd_timer_for_plugins [--app_name <app name> --method <method name> | --help] =head1 DESCRIPTION This script adds/removes the systemd timer/service for a specific plugin. This enables and starts, or disables and stops the respective timers and services. This script requires the C<initialize_${app_name}_plugin.service> and C<initialize_${app_name}_plugin.timer> files in '/etc/systemd/system' directory. Running this setup with out the files will result in failure. The script excepts either 'add' or 'remove' for --method. The script shows addition verbose output for --verbose. =cut __PACKAGE__->new(@ARGV)->run() if !caller; =head2 I<OBJ>->run() Runs this script. =cut sub run ($self) { my $app_name = $self->getopt('app_name'); my $method = $self->getopt('method'); if ( !$app_name || !$method ) { die $self->full_help(); } if ( $method !~ /^(add|remove)$/ ) { say "The method accepts the following argument: 'add' (or) 'remove'"; die $self->full_help(); } $verbose = $self->getopt('verbose') if defined $self->getopt('verbose'); my $systemd_name = 'initialize_' . $app_name . '_plugin'; say "Running setup_systemd_timer_for_plugins for app: $app_name, method: $method" if $verbose; $self->$method($systemd_name) if __PACKAGE__->can($method); _reload_daemon(); return 0; } sub add ( $self, $systemd_name ) { my $systemd_timer = $systemd_name . '.timer'; return _systemd_enable_and_start($systemd_timer); } sub remove ( $self, $systemd_name ) { my $systemd_service = $systemd_name . '.service'; my $systemd_timer = $systemd_name . '.timer'; return _systemd_disable_and_stop($systemd_timer) && _systemd_disable($systemd_service); } sub _reload_daemon () { say "Reloading daemon.." if $verbose; return Cpanel::SafeRun::Object->new_or_die( 'program' => SYSTEMCTL_BINARY, 'args' => ['daemon-reload'] ); } sub _systemd_enable_and_start ($systemd_name) { say "Enabling systemd service $systemd_name" if $verbose; my $result = Cpanel::SafeRun::Object->new( 'program' => SYSTEMCTL_BINARY, 'args' => ['enable', $systemd_name, '--now'] ); if ( $result->exec_failed ) { say "Failed to enable and start $systemd_name"; say $result->stderr; return !!0; } return !!1; } sub _systemd_disable_and_stop ($systemd_name) { say "Disabling systemd service $systemd_name" if $verbose; my $result = Cpanel::SafeRun::Object->new( 'program' => SYSTEMCTL_BINARY, 'args' => ['disable', $systemd_name, '--now'] ); if ( $result->exec_failed ) { say "Failed to disable and stop $systemd_name"; say $result->stderr; return !!0; } return !!1; } sub _systemd_disable ($systemd_name) { say "Disabling systemd service $systemd_name" if $verbose; my $result = Cpanel::SafeRun::Object->new( 'program' => SYSTEMCTL_BINARY, 'args' => ['disable', $systemd_name] ); if ( $result->exec_failed ) { say "Failed to disable $systemd_name"; say $result->stderr; return !!0; } return !!1; } 1;