Skip to Content
AdministrationPipeline Runtime

Pipeline Runtime

Pipeline Runtime decides where a Nextflow workflow runs and what environment it runs in. It is the second required piece of infrastructure after Data Storage: without a usable run directory no pipeline can start, and without Conda most packages cannot resolve their tools.

The screen is Pipeline Runtime (/admin/pipeline-runtime). It has no sidebar entry; reach it from Settings → Infrastructure, or from the Pipeline Runtime button on Data Storage. It is split into Required Configuration (always visible) and Advanced Configuration (behind a Show button).

Values supplied through settings.json or a SEQDESK_* environment variable are applied on top of whatever this screen saved. If a runtime value is pinned at one of those layers, editing the field here has no effect on execution. Check Info → Configuration sources when a change does not take.

Choosing local or SLURM

TargetWhat happensGood for
LocalNextflow runs as a child process on the SeqDesk host and executes tasks thereSmall utilities, single-sample work, any host without a scheduler
SLURMNextflow submits work through sbatch and tracks it with squeue and sacctAssembly, binning, classification — anything that needs a cluster

SLURM is entirely optional. sbatch, squeue and sacct are only invoked for runs that resolve to SLURM; a purely local instance never needs them installed.

The common production shape is a local global default with SLURM for the heavy packages, set through per-pipeline overrides rather than by flipping the whole instance.

How the target for one run is decided

SeqDesk resolves the execution target per run, in this order — the first match wins:

Run override

A facility admin can pick local or slurm in the launch dialog. The API accepts executionMode of default, local or slurm; anything else is rejected with executionMode must be one of: default, local, slurm.

Per-pipeline default

The Per-Pipeline Defaults table on this page. Each installed pipeline can be Inherit, Local, or SLURM, with its own queue, cores, memory, hours, options and Nextflow profile.

Global setting

The Use SLURM switch under Required Configuration.

Local

The built-in fallback.

Each run records the resolved mode, the source of that decision (run, pipeline or global) and a non-secret snapshot of the scheduler settings, so you can still explain an old run after the global settings have changed.

Required Configuration

FieldConfig keyEnv variableDefault
Use SLURMpipelines.execution.slurm.enabled (or mode)SEQDESK_SLURM_ENABLED, SEQDESK_PIPELINE_MODEfalse / local
Queue/Partitionpipelines.execution.slurm.queueSEQDESK_SLURM_QUEUEcpu
Pipeline Run Directorypipelines.execution.runDirectorySEQDESK_PIPELINE_RUN_DIR/data/pipeline_runs
Conda Installation Pathpipelines.execution.conda.pathSEQDESK_CONDA_PATHempty
Conda Environment Namepipelines.execution.conda.environmentSEQDESK_CONDA_ENVseqdesk-pipelines

Queue/Partition only appears when Use SLURM is on.

The test buttons

Each required field has a Test button that probes the live host through POST /api/admin/settings/pipelines/test-setting. They run against the value currently in the box, so you can validate before saving.

ButtonWhat it checksTypical failure
Test next to Use SLURMRuns sinfo --version, then lists the available partitionsNot available“SLURM commands not found. Disable SLURM in settings to run locally.”
Test next to Pipeline Run DirectoryThe directory exists and is writableNo path provided, or a permission error
Test next to Conda Installation Path<path>/bin/conda or <path>/condabin/conda exists and reports a versionConda not found at path, listing both paths it tried
Auto next to Conda Installation PathDetects the Conda base and environment from the server process and fills both fields inNo conda environment detected in the server process.

The Conda test also reports whether the defaults channel is usable, warning “defaults channel not usable without ToS” when Anaconda’s terms have not been accepted for that installation. Pipelines that pull from conda-forge and bioconda are unaffected.

Advanced Configuration

SLURM resources

Shown only when Use SLURM is on.

FieldConfig keyEnv variableDefault
CPU Corespipelines.execution.slurm.coresSEQDESK_SLURM_CORES4
Memorypipelines.execution.slurm.memorySEQDESK_SLURM_MEMORY64GB
Time Limit (hours)pipelines.execution.slurm.timeLimitSEQDESK_SLURM_TIME12
Additional SLURM Optionspipelines.execution.slurm.optionsempty

The time limit is in hours, not minutes. It is written into the job script as #SBATCH -t <N>:0:0. Setting 60 therefore asks for 60 hours, which most partitions refuse: the job sits PENDING forever with reason (PartitionTimeLimit) and nothing in SeqDesk reports an error. Use small whole hours.

Additional SLURM Options is appended verbatim to the submission, so it is the right place for --account=…, --constraint=…, or a QOS flag.

Nextflow Profile Override

pipelines.execution.nextflowProfile, empty by default. When set, it replaces the profile SeqDesk would otherwise choose (for example slurm,conda). Leave it empty unless a package needs a profile the default logic does not produce.

There is no Nextflow path setting. The nextflow binary is resolved from the runtime PATH, or from inside the configured Conda environment.

Per-Pipeline Defaults

A table with one row per installed pipeline package:

ColumnMeaning
PipelineDisplay name, package id and category
TargetInherit (Local/SLURM), Local, or SLURM
Queue, Cores, Memory, Hours, OptionsSLURM settings for this package; blank means inherit the global value, which is shown as the placeholder
ProfileNextflow profile override for this package

Setting the target to Local disables the SLURM columns for that row. The table is empty with “No pipeline packages are installed.” until you install packages on Settings → Pipelines.

The same policy expressed in settings.json:

{ "pipelines": { "enabled": true, "execution": { "mode": "local", "runDirectory": "/data/pipeline_runs", "conda": { "path": "/opt/conda", "environment": "seqdesk-pipelines", "cacheDir": "/net/shared/nextflow-conda" }, "slurm": { "enabled": true, "queue": "cpu", "cores": 8, "memory": "64GB", "timeLimit": 12 }, "pipelineOverrides": { "mag": { "mode": "slurm", "slurm": { "queue": "long", "cores": 16, "memory": "128GB", "timeLimit": 48 } }, "metaxpath": { "mode": "slurm", "slurm": { "queue": "long", "cores": 16, "memory": "128GB", "timeLimit": 48 } } } } } }

Small per-order utilities such as simulate-reads, fastq-checksum and fastqc are normally left to inherit local.

Weblog

FieldDescription
Nextflow Weblog URLYour SeqDesk base URL plus /api/pipelines/weblog
Weblog SecretOptional shared token sent with each callback

Nextflow POSTs run and task events to this URL as they happen, which is what drives live progress and the DAG view. The Test button probes the URL from the app host.

Weblog callbacks come from wherever the tasks run. On a cluster whose compute nodes cannot reach the application, no weblog events arrive at all. That is a supported configuration: the pipeline-monitor background worker reconciles run state from the scheduler and the Nextflow trace file instead. Leaving the weblog URL empty is only flagged as recommended, never required.

Conda cache directory

pipelines.execution.conda.cacheDir (SEQDESK_CONDA_CACHE_DIR) points Nextflow’s per-process Conda environments at a shared directory, keyed by content hash. On a cluster where compute nodes have no internet access, build the environments once from a host that does — for example by running the pipeline locally first — and the SLURM nodes reuse them from the shared path.

Infrastructure readiness

The sidebar’s Infrastructure entry carries a badge driven by GET /api/admin/infrastructure/readiness:

ItemSeverityConsidered missing when
Data storage pathRequiredUnset
Pipeline run directoryRequiredUnset, or literally /
Conda pathRecommendedUnset
Weblog URLRecommendedUnset

A red ! means at least one required item is missing; an amber triangle means only recommended items are pending. Clicking the badge jumps to the first gap. The same summary is rendered inline at the top of both Data Storage and Pipeline Runtime.

The Infrastructure page itself (/admin/data-compute) is a hub: two cards linking to the editable screens, plus an Import settings.json panel that can Load example, upload or paste a configuration, Validate JSON as a dry run, and then apply it. It accepts flat keys such as dataBasePath as well as nested ones such as site.dataBasePath, which makes it convenient for cloning a known-good setup onto a second instance.

Verifying the runtime end to end

On a dev or production-like Linux server, the command-line smoke test exercises the whole path over HTTP and the filesystem — no browser needed.

SEQDESK_RUNTIME_E2E_BASE_URL="https://your-seqdesk.example.org" \ SEQDESK_RUNTIME_E2E_EMAIL="admin@example.com" \ SEQDESK_RUNTIME_E2E_PASSWORD="admin-password" \ npm run pipeline:e2e:runtime -- --ensure-dummy-data
StepWhat it proves
LoginFacility-admin API login works
Sequencing order selectionUses the admin dummy-data order, or creates it with --ensure-dummy-data
Local runsimulate-reads starts locally and emits no SLURM directives
SLURM runsimulate-reads submits through sbatch, records a numeric job id, and writes SLURM logs
Output checkpipeline.out and output/summary/simulation-summary.tsv exist

Useful variants:

# Local-only check on a host without SLURM npm run pipeline:e2e:runtime -- --skip-slurm --ensure-dummy-data # SLURM-only check npm run pipeline:e2e:runtime -- --skip-local --ensure-dummy-data # Assert the configured default policy for the selected pipeline npm run pipeline:e2e:runtime -- --include-default-policy --expect-default-mode slurm # Use a specific sequencing order instead of the dummy-data one npm run pipeline:e2e:runtime -- --order-id <order-id>

For the full local + SLURM run the host must have sbatch, squeue and sacct, and must be able to write the configured run directory.

Troubleshooting

SymptomCauseFix
SLURM Test reports Not availablesinfo is missing on the app host, or the daemon is unreachableInstall the SLURM client and confirm sinfo --version works as the service account
A submitted job stays PENDING with (PartitionTimeLimit)The time limit is in hours and exceeds the partition maximumLower Time Limit (hours)
Conda not found at pathThe path is not a Conda base directoryUse Auto, or point at the directory containing bin/conda
Runs fail immediately with Process requirement exceeds available CPUsThe package declares more CPUs than the allocation grantsRaise the SLURM cores for that pipeline, or cap the package’s own thread parameters
A run directory test failsMissing directory or no write permissionCreate it and grant write access to the service account
Live progress never updatesCompute nodes cannot reach the weblog URLExpected on isolated clusters — rely on pipeline-monitor; see Monitoring
A saved runtime value has no effectA SEQDESK_* variable or settings.json outranks the databaseChange it at the winning layer; see Configuration Sources
The Per-Pipeline Defaults table is emptyNo packages installedInstall them on Settings → Pipelines

See also