def run(self, job, id): """ Job to run rsync task of `id`. Output is saved to job log excerpt as well as syslog. """ rsync = self.middleware.call_sync('rsynctask._get_instance', id) commandline = self.middleware.call_sync('rsynctask.commandline', id) cp = run_command_with_user_context( commandline, rsync['user'], lambda v: job.logs_fd.write(v) ) for klass in ('RsyncSuccess', 'RsyncFailed') if not rsync['quiet'] else (): self.middleware.call_sync('alert.oneshot_delete', klass, rsync['id']) if cp.returncode != 0: if not rsync['quiet']: self.middleware.call_sync('alert.oneshot_create', 'RsyncFailed', rsync) raise CallError( f'rsync command returned {cp.returncode}. Check logs for further information.' ) elif not rsync['quiet']: self.middleware.call_sync('alert.oneshot_create', 'RsyncSuccess', rsync)
def run(self, job, id): """ Job to run cronjob task of `id`. """ def __cron_log(line): job.logs_fd.write(line) syslog.syslog(syslog.LOG_INFO, line.decode()) cron_task = self.middleware.call_sync('cronjob._get_instance', id) cron_cmd = ' '.join( self.middleware.call_sync('cronjob.construct_cron_command', cron_task['schedule'], cron_task['user'], cron_task['command'], cron_task['stdout'], cron_task['stderr'])[7:]) job.set_progress(10, 'Executing Cron Task') syslog.openlog('cron', facility=syslog.LOG_CRON) syslog.syslog(syslog.LOG_INFO, f'({cron_task["user"]}) CMD ({cron_cmd})') cp = run_command_with_user_context(cron_cmd, cron_task['user'], __cron_log) syslog.closelog() job.set_progress(85, 'Executed Cron Task') if cp.stdout: email = (self.middleware.call_sync( 'user.query', [['username', '=', cron_task['user']]], {'get': True}))['email'] stdout = cp.stdout.decode() if email: mail_job = self.middleware.call_sync('mail.send', { 'subject': 'CronTask Run', 'text': stdout, 'to': [email] }) job.set_progress(95, 'Sending mail for Cron Task output') mail_job.wait_sync() if mail_job.error: job.logs_fd.write( f'Failed to send email for CronTask run: {mail_job.error}' .encode()) else: job.set_progress( 95, 'Email for root user not configured. Skipping sending mail.' ) job.logs_fd.write( f'Executed CronTask - {cron_cmd}: {stdout}'.encode()) job.set_progress(100, 'Execution of Cron Task complete.')
def run(self, job, id): """ Job to run rsync task of `id`. Output is saved to job log excerpt as well as syslog. """ rsync = self.middleware.call_sync('rsynctask._get_instance', id) commandline = self.middleware.call_sync('rsynctask.commandline', id) cp = run_command_with_user_context(commandline, rsync['user'], lambda v: job.logs_fd.write(v)) if cp.returncode != 0: raise CallError( f'rsync command returned {cp.returncode}. Check logs for further information.' )
def run(self, job, id): """ Job to run rsync task of `id`. Output is saved to job log excerpt as well as syslog. """ rsync = self.middleware.call_sync('rsynctask._get_instance', id) commandline = self.middleware.call_sync('rsynctask.commandline', id) cp = run_command_with_user_context( commandline, rsync['user'], lambda v: job.logs_fd.write(v) ) if cp.returncode != 0: raise CallError( f'rsync command returned {cp.returncode}. Check logs for further information.' )
def run(self, job, id): """ Job to run cronjob task of `id`. """ def __cron_log(line): job.logs_fd.write(line) syslog.syslog(syslog.LOG_INFO, line.decode()) cron_task = self.middleware.call_sync('cronjob._get_instance', id) cron_cmd = ' '.join( self.middleware.call_sync( 'cronjob.construct_cron_command', cron_task['schedule'], cron_task['user'], cron_task['command'], cron_task['stdout'], cron_task['stderr'] )[7:] ) job.set_progress( 10, 'Executing Cron Task' ) syslog.openlog('cron', facility=syslog.LOG_CRON) syslog.syslog(syslog.LOG_INFO, f'({cron_task["user"]}) CMD ({cron_cmd})') cp = run_command_with_user_context( cron_cmd, cron_task['user'], __cron_log ) syslog.closelog() job.set_progress( 85, 'Executed Cron Task' ) if cp.stdout: email = ( self.middleware.call_sync('user.query', [['username', '=', cron_task['user']]], {'get': True}) )['email'] stdout = cp.stdout.decode() if email: mail_job = self.middleware.call_sync( 'mail.send', { 'subject': 'CronTask Run', 'text': stdout, 'to': [email] } ) job.set_progress( 95, 'Sending mail for Cron Task output' ) mail_job.wait_sync() if mail_job.error: job.logs_fd.write(f'Failed to send email for CronTask run: {mail_job.error}'.encode()) else: job.set_progress( 95, 'Email for root user not configured. Skipping sending mail.' ) job.logs_fd.write(f'Executed CronTask - {cron_cmd}: {stdout}'.encode()) job.set_progress( 100, 'Execution of Cron Task complete.' )