. * * @link https://www.librenms.org */ namespace LibreNMS\Validations; use Illuminate\Support\Facades\Cache; use LibreNMS\Config; use LibreNMS\ValidationResult; use LibreNMS\Validator; class Scheduler extends BaseValidation { /** * Validate this module. * To return ValidationResults, call ok, warn, fail, or result methods on the $validator * * @param Validator $validator */ public function validate(Validator $validator): void { if (! Cache::has('scheduler_working')) { $commands = $this->generateCommands($validator); $validator->result(ValidationResult::fail('Scheduler is not running')->setFix($commands)); } } /** * @param Validator $validator * @return array */ private function generateCommands(Validator $validator): array { $commands = []; $systemctl_bin = Config::locateBinary('systemctl'); $base_dir = rtrim($validator->getBaseDir(), '/'); if (is_executable($systemctl_bin)) { // systemd exists if ($base_dir === '/opt/librenms') { // standard install dir $commands[] = 'sudo cp /opt/librenms/dist/librenms-scheduler.service /opt/librenms/dist/librenms-scheduler.timer /etc/systemd/system/'; } else { // non-standard install dir $commands[] = "sudo sh -c 'sed \"s#/opt/librenms#$base_dir#\" $base_dir/dist/librenms-scheduler.service > /etc/systemd/system/librenms-scheduler.service'"; $commands[] = "sudo sh -c 'sed \"s#/opt/librenms#$base_dir#\" $base_dir/dist/librenms-scheduler.timer > /etc/systemd/system/librenms-scheduler.timer'"; } $commands[] = 'sudo systemctl enable librenms-scheduler.timer'; $commands[] = 'sudo systemctl start librenms-scheduler.timer'; return $commands; } // non-systemd use cron if ($base_dir === '/opt/librenms') { $commands[] = 'sudo cp /opt/librenms/dist/librenms-scheduler.cron /etc/cron.d/'; return $commands; } // non-standard install dir $commands[] = "sudo sh -c 'sed \"s#/opt/librenms#$base_dir#\" $base_dir/dist/librenms-scheduler.cron > /etc/cron.d/librenms-scheduler.cron'"; return $commands; } }