| --[[ | |
| --Example runtime.lua file for Slurm | |
| --Selected with DefRuntimePlugin=runtime/lua in slurm.conf, or per job with | |
| --the --runtime option. See slurm.conf(5). | |
| --For the runtime operations and when they are called check: | |
| -- src/interfaces/runtime.h | |
| -- | |
| --The script is re-read, re-compiled and its top level re-executed on every | |
| --call, not just once when the plugin is loaded. Keep top-level work cheap: | |
| --it runs again for every step and every task, on every node, and in every | |
| --command that submits a job or step, once per client-side call, and nothing | |
| --persists between calls. The setup, cleanup, task_init, and run functions | |
| --must be defined, and are called with the step id as a string, in the | |
| --same form used elsewhere in Slurm (e.g. "1234", "1234_5", "1234.0", | |
| --"1234_5.batch"). task_init and run are additionally called with the | |
| --numeric task id as a second argument; setup and cleanup get nil there since | |
| --they are not called per-task. | |
| -- | |
| --The apply_job_desc, apply_step_req, apply_launch_params, apply_env, and | |
| --apply_interactive_step functions are optional: an undefined one is skipped. | |
| --They run client-side, as the submitting user, in the command that submits | |
| --the job or step (srun, sbatch, salloc, scrun, or scrontab). apply_job_desc | |
| --also runs in slurmrestd, as the user slurmrestd runs as, for job submission | |
| --and allocation requests. This file must be readable on those hosts. In | |
| --configless mode (SlurmctldParameters=enable_configless), slurmctld sends it | |
| --to those hosts. They take the same two arguments as the functions above, | |
| --with the id known at that point: nil for apply_job_desc, since the job has | |
| --no id until it is submitted; for apply_step_req, the step id if the step | |
| --already has one (the later components of a het step), otherwise the job's | |
| --own numeric id rather than the "1234_5" or "1234+1" form; and nil for the | |
| --others. The task id is always nil. They receive no job description, | |
| --environment or command and cannot change them: they can only log, or reject | |
| --the operation by returning anything but slurm.SUCCESS. | |
| --]] | |
| log_prefix = 'slurm_runtime' | |
| --[[ | |
| --Set up the runtime for the step. Runs in slurmstepd. | |
| --Returning anything but slurm.SUCCESS fails the step. | |
| --]] | |
| function slurm_runtime_setup(id) | |
| slurm.log_debug("%s: setup %s", log_prefix, id) | |
| return slurm.SUCCESS | |
| end | |
| --[[ | |
| --Clean up the runtime for the step. Runs in slurmstepd. | |
| --The return value is only logged; the interface cannot pass it on. | |
| --]] | |
| function slurm_runtime_cleanup(id) | |
| slurm.log_debug("%s: cleanup %s", log_prefix, id) | |
| return slurm.SUCCESS | |
| end | |
| --[[ | |
| --Prepare the runtime for a task. Runs in the task child after fork(), as the | |
| --job user. The return value is only logged. | |
| --]] | |
| function slurm_runtime_task_init(id, task_id) | |
| slurm.log_debug("%s: task_init %s task %d", log_prefix, id, task_id) | |
| return slurm.SUCCESS | |
| end | |
| --[[ | |
| --Run a task within the runtime. Runs in the task child after fork(), as the | |
| --job user. | |
| -- | |
| --A Lua script may directly exec the task, in which case this never returns. | |
| --Returning slurm.SUCCESS or slurm.ESLURM_NOT_SUPPORTED means "I did not run | |
| --it, exec it yourself" and slurmstepd execs the task as usual. | |
| -- | |
| --Any other value becomes the task's exit status. A value in the range 1-255 | |
| --is reported as the errno of a failed exec: returning 13 makes the task exit | |
| --13 and report "Permission denied". slurm.ERROR and the Slurm error codes | |
| --other than slurm.ESLURM_NOT_SUPPORTED fall outside that range and make the | |
| --task exit 255. In every failing case slurmstepd logs | |
| --"execve(): <program>: <error>" even though the task was never exec'd. | |
| --]] | |
| function slurm_runtime_run(id, task_id) | |
| slurm.log_debug("%s: run %s task %d", log_prefix, id, task_id) | |
| return slurm.SUCCESS | |
| end | |
| --[[ | |
| --Called before a job is submitted, wherever a job description is built: | |
| --salloc, sbatch, scrun, scrontab, srun when it allocates the job, and | |
| --slurmrestd for job submission and allocation requests. Optional. | |
| --Returning anything but slurm.SUCCESS fails the submission. | |
| --]] | |
| function slurm_runtime_apply_job_desc(id, task_id) | |
| slurm.log_debug("%s: apply_job_desc %s", log_prefix, tostring(id)) | |
| return slurm.SUCCESS | |
| end | |
| --[[ | |
| --Called in srun before a step is created. Optional. Returning anything but | |
| --slurm.SUCCESS fails the step. | |
| --]] | |
| function slurm_runtime_apply_step_req(id, task_id) | |
| slurm.log_debug("%s: apply_step_req %s", log_prefix, tostring(id)) | |
| return slurm.SUCCESS | |
| end | |
| --[[ | |
| --Called in srun before a step is launched. Optional. Returning anything but | |
| --slurm.SUCCESS fails the launch. | |
| --]] | |
| function slurm_runtime_apply_launch_params(id, task_id) | |
| slurm.log_debug("%s: apply_launch_params %s", log_prefix, tostring(id)) | |
| return slurm.SUCCESS | |
| end | |
| --[[ | |
| --Called before a command passes the runtime's environment to what it | |
| --starts: srun's tasks, the batch script of sbatch (once per job component) | |
| --and of scrontab, salloc's command, user shell or interactive step (first | |
| --job component only, also with the no-shell option), and the srun calls of | |
| --a job that scrun allocates. Optional. Returning anything but slurm.SUCCESS | |
| --fails that command. | |
| --]] | |
| function slurm_runtime_apply_env(id, task_id) | |
| slurm.log_debug("%s: apply_env %s", log_prefix, tostring(id)) | |
| return slurm.SUCCESS | |
| end | |
| --[[ | |
| --Called in salloc, for the first job component only, before it starts its | |
| --interactive step: when it has neither a command nor the no-shell option and | |
| --LaunchParameters=use_interactive_step is set. Optional. Returning anything | |
| --but slurm.SUCCESS fails salloc. | |
| --]] | |
| function slurm_runtime_apply_interactive_step(id, task_id) | |
| slurm.log_debug("%s: apply_interactive_step %s", log_prefix, | |
| tostring(id)) | |
| return slurm.SUCCESS | |
| end |