Service tasks ============= Each service embeds its own scheduling table. Some scheduled tasks are automatically configured: * data synchronization * resource information push to the collector * service configuration push to the collector * service and resource status push to the collector * compliance run Other tasks can be defined by the users. Tasks Features ************** * tasks don't need to be added to the system's scheduler, thus can be provisioned along with the service * tasks follow the service relocations * tasks can can be disabled, scoped, unscheduled * tasks runs can be conditionned by a specific service state. Only run on the active instance of a failover for example * tasks can be run manually * tasks can run impersonated as a specified user * tasks can have cron-style schedule, anacron-style, networker-style schedule definition * dangerous tasks can ask for a confirmation * task commands support shell lexical (shlex) format * tasks support the requires keyword, to allow runs only when instance resources are in the specified states. Typical Use-Cases ***************** * embed scheduled tasks in a failover service to not have to swith-over the cronjobs * embed complex commands as scheduled or unschedule tasks to ease and secure their use (ex: backups of dockerized databases, run a dockerized mysql client with predefinited args) Tasks Operations **************** Print a service tasks and their scheduling status +++++++++++++++++++++++++++++++++++++++++++++++++ :: $ sudo svcmgr -s testmd print schedule action last run config parameter schedule definition ------ -------- ---------------- ------------------- ... task#0 - task#0.schedule - task#1 2016-11-28 04:01:00 task#1.schedule @10 Manually run a task +++++++++++++++++++ All service tasks :: $ sudo svcmgr -s testmd run One specific task :: $ sudo svcmgr -s testmd run --rid task#0 All tasks with the backup tag :: $ sudo svcmgr -s testmd run --rid task --tags backup Task Configuration ****************** :: [task#0] command = id -u && /bin/true user = admin The complete reference is available :doc:`here `. Task confirmation ***************** Task confirmation is activated by the ``confirmation`` keyword. :: [task#0] command = /bin/true confirmation = true A ``no`` response to the confirmation prompt aborts the run with a ``1`` returncode. :: $ sudo svcmgr -s testmd run --rid task#0 This task run requires confirmation. Please make sure you fully understand its role and effects before confirming the run. Do you really want to run task#0 (yes/no) > no 11:53:08,758 ERROR 'run' action stopped on execution error: run aborted If no responsse is provided in 30 seconds, the run is arborted with a ``1`` returncode. :: $ sudo testmd run This task run requires confirmation. Please make sure you fully understand its role and effects before confirming the run. Do you really want to run task#0 (yes/no) > 11:30:36,059 ERROR 'run' action stopped on execution error: timeout waiting for confirmation A ``yes`` response to the confirmation prompt unblocks the run and the ``command`` returncode is propagated. :: $ sudo testmd run This task run requires confirmation. Please make sure you fully understand its role and effects before confirming the run. Do you really want to run task#0 (yes/no) > yes 11:29:36,973 task#0 INFO run confirmed 11:29:36,976 task#0 INFO /bin/true