CINXE.COM
Process reference — Nextflow documentation
<!DOCTYPE html> <html class="writer-html5" lang="en" > <head> <meta charset="utf-8" /><meta name="generator" content="Docutils 0.19: https://docutils.sourceforge.io/" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <title>Process reference — Nextflow documentation</title> <link rel="stylesheet" href="../_static/pygments.css" type="text/css" /> <link rel="stylesheet" href="../_static/css/theme.css" type="text/css" /> <link rel="stylesheet" href="../_static/copybutton.css" type="text/css" /> <link rel="stylesheet" href="../_static/tabs.css" type="text/css" /> <link rel="stylesheet" href="../_static/theme.css" type="text/css" /> <link rel="shortcut icon" href="../_static/favicon.ico"/> <!--[if lt IE 9]> <script src="../_static/js/html5shiv.min.js"></script> <![endif]--> <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script> <script src="../_static/jquery.js"></script> <script src="../_static/underscore.js"></script> <script src="../_static/_sphinx_javascript_frameworks_compat.js"></script> <script src="../_static/doctools.js"></script> <script src="../_static/sphinx_highlight.js"></script> <script src="../_static/clipboard.min.js"></script> <script src="../_static/copybutton.js"></script> <script src="../_static/js/theme.js"></script> <link rel="index" title="Index" href="../genindex.html" /> <link rel="search" title="Search" href="../search.html" /> <link rel="next" title="Channel factories" href="channel.html" /> <link rel="prev" title="Standard library" href="stdlib.html" /> <!-- Google Tag Manager --> <script>(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start': new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0], j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src= 'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f); })(window,document,'script','dataLayer','GTM-TNCXSWG');</script> <!-- End Google Tag Manager --> </head> <body class="wy-body-for-nav"> <div class="wy-grid-for-nav"> <nav data-toggle="wy-nav-shift" class="wy-nav-side"> <div class="wy-side-scroll"> <div class="wy-side-nav-search" > <a href="../index.html"> <img src="../_static/nextflow-logo.png" class="logo" alt="Logo"/> </a> <div role="search"> <form id="rtd-search-form" class="wy-form" action="../search.html" method="get"> <input type="text" name="q" placeholder="Search docs" /> <input type="hidden" name="check_keywords" value="yes" /> <input type="hidden" name="area" value="default" /> </form> </div> <div class="sidebar_version"> <span class="version">Version dev <samp>(da5f75928)</samp> </span> <select onchange="window.location = this.value;"> <option value="/docs/stable/index.html" >Stable</option> <option value="/docs/edge/index.html" >Edge</option> <option value="/docs/latest/index.html" selected>Latest</option> </select> </select> </div> </div> <div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu"> <p class="caption" role="heading"><span class="caption-text">Get started</span></p> <ul> <li class="toctree-l1"><a class="reference internal" href="../overview.html">Overview</a></li> <li class="toctree-l1"><a class="reference internal" href="../install.html">Installation</a></li> <li class="toctree-l1"><a class="reference internal" href="../developer-env.html">Environment setup</a></li> <li class="toctree-l1"><a class="reference internal" href="../your-first-script.html">Your first script</a></li> </ul> <p class="caption" role="heading"><span class="caption-text">Running pipelines</span></p> <ul> <li class="toctree-l1"><a class="reference internal" href="../cli.html">Command line</a></li> <li class="toctree-l1"><a class="reference internal" href="../config.html">Configuration</a></li> <li class="toctree-l1"><a class="reference internal" href="../executor.html">Executors</a></li> <li class="toctree-l1"><a class="reference internal" href="../cache-and-resume.html">Caching and resuming</a></li> <li class="toctree-l1"><a class="reference internal" href="../reports.html">Reports</a></li> <li class="toctree-l1"><a class="reference internal" href="../plugins.html">Plugins</a></li> </ul> <p class="caption" role="heading"><span class="caption-text">Developing pipelines</span></p> <ul> <li class="toctree-l1"><a class="reference internal" href="../script.html">Scripts</a></li> <li class="toctree-l1"><a class="reference internal" href="../working-with-files.html">Working with files</a></li> <li class="toctree-l1"><a class="reference internal" href="../process.html">Processes</a></li> <li class="toctree-l1"><a class="reference internal" href="../channel.html">Channels</a></li> <li class="toctree-l1"><a class="reference internal" href="../workflow.html">Workflows</a></li> <li class="toctree-l1"><a class="reference internal" href="../module.html">Modules</a></li> <li class="toctree-l1"><a class="reference internal" href="../notifications.html">Notifications</a></li> <li class="toctree-l1"><a class="reference internal" href="../secrets.html">Secrets</a></li> <li class="toctree-l1"><a class="reference internal" href="../sharing.html">Sharing pipelines</a></li> <li class="toctree-l1"><a class="reference internal" href="../vscode.html">VS Code integration</a></li> </ul> <p class="caption" role="heading"><span class="caption-text">Software dependencies</span></p> <ul> <li class="toctree-l1"><a class="reference internal" href="../git.html">Git</a></li> <li class="toctree-l1"><a class="reference internal" href="../container.html">Containers</a></li> <li class="toctree-l1"><a class="reference internal" href="../conda.html">Conda environments</a></li> <li class="toctree-l1"><a class="reference internal" href="../spack.html">Spack environments</a></li> <li class="toctree-l1"><a class="reference internal" href="../wave.html">Wave containers</a></li> </ul> <p class="caption" role="heading"><span class="caption-text">Compute & storage</span></p> <ul> <li class="toctree-l1"><a class="reference internal" href="../aws.html">Amazon Web Services</a></li> <li class="toctree-l1"><a class="reference internal" href="../amazons3.html">Amazon S3</a></li> <li class="toctree-l1"><a class="reference internal" href="../azure.html">Azure</a></li> <li class="toctree-l1"><a class="reference internal" href="../google.html">Google Cloud</a></li> <li class="toctree-l1"><a class="reference internal" href="../kubernetes.html">Kubernetes</a></li> <li class="toctree-l1"><a class="reference internal" href="../fusion.html">Fusion file system</a></li> </ul> <p class="caption" role="heading"><span class="caption-text">Reference</span></p> <ul class="current"> <li class="toctree-l1"><a class="reference internal" href="syntax.html">Syntax</a></li> <li class="toctree-l1"><a class="reference internal" href="cli.html">CLI reference</a></li> <li class="toctree-l1"><a class="reference internal" href="config.html">Configuration options</a></li> <li class="toctree-l1"><a class="reference internal" href="env-vars.html">Environment variables</a></li> <li class="toctree-l1"><a class="reference internal" href="feature-flags.html">Feature flags</a></li> <li class="toctree-l1"><a class="reference internal" href="stdlib.html">Standard library</a></li> <li class="toctree-l1 current"><a class="current reference internal" href="#">Process reference</a><ul> <li class="toctree-l2"><a class="reference internal" href="#task-properties">Task properties</a></li> <li class="toctree-l2"><a class="reference internal" href="#inputs">Inputs</a></li> <li class="toctree-l2"><a class="reference internal" href="#outputs">Outputs</a><ul> <li class="toctree-l3"><a class="reference internal" href="#generic-options">Generic options</a></li> </ul> </li> <li class="toctree-l2"><a class="reference internal" href="#directives">Directives</a><ul> <li class="toctree-l3"><a class="reference internal" href="#accelerator">accelerator</a></li> <li class="toctree-l3"><a class="reference internal" href="#afterscript">afterScript</a></li> <li class="toctree-l3"><a class="reference internal" href="#arch">arch</a></li> <li class="toctree-l3"><a class="reference internal" href="#array">array</a></li> <li class="toctree-l3"><a class="reference internal" href="#beforescript">beforeScript</a></li> <li class="toctree-l3"><a class="reference internal" href="#cache">cache</a></li> <li class="toctree-l3"><a class="reference internal" href="#clusteroptions">clusterOptions</a></li> <li class="toctree-l3"><a class="reference internal" href="#conda">conda</a></li> <li class="toctree-l3"><a class="reference internal" href="#container">container</a></li> <li class="toctree-l3"><a class="reference internal" href="#containeroptions">containerOptions</a></li> <li class="toctree-l3"><a class="reference internal" href="#cpus">cpus</a></li> <li class="toctree-l3"><a class="reference internal" href="#debug">debug</a></li> <li class="toctree-l3"><a class="reference internal" href="#disk">disk</a></li> <li class="toctree-l3"><a class="reference internal" href="#echo">echo</a></li> <li class="toctree-l3"><a class="reference internal" href="#errorstrategy">errorStrategy</a></li> <li class="toctree-l3"><a class="reference internal" href="#executor">executor</a></li> <li class="toctree-l3"><a class="reference internal" href="#ext">ext</a></li> <li class="toctree-l3"><a class="reference internal" href="#fair">fair</a></li> <li class="toctree-l3"><a class="reference internal" href="#label">label</a></li> <li class="toctree-l3"><a class="reference internal" href="#machinetype">machineType</a></li> <li class="toctree-l3"><a class="reference internal" href="#maxsubmitawait">maxSubmitAwait</a></li> <li class="toctree-l3"><a class="reference internal" href="#maxerrors">maxErrors</a></li> <li class="toctree-l3"><a class="reference internal" href="#maxforks">maxForks</a></li> <li class="toctree-l3"><a class="reference internal" href="#maxretries">maxRetries</a></li> <li class="toctree-l3"><a class="reference internal" href="#memory">memory</a></li> <li class="toctree-l3"><a class="reference internal" href="#module">module</a></li> <li class="toctree-l3"><a class="reference internal" href="#penv">penv</a></li> <li class="toctree-l3"><a class="reference internal" href="#pod">pod</a></li> <li class="toctree-l3"><a class="reference internal" href="#publishdir">publishDir</a></li> <li class="toctree-l3"><a class="reference internal" href="#queue">queue</a></li> <li class="toctree-l3"><a class="reference internal" href="#resourcelabels">resourceLabels</a></li> <li class="toctree-l3"><a class="reference internal" href="#resourcelimits">resourceLimits</a></li> <li class="toctree-l3"><a class="reference internal" href="#scratch">scratch</a></li> <li class="toctree-l3"><a class="reference internal" href="#shell">shell</a></li> <li class="toctree-l3"><a class="reference internal" href="#spack">spack</a></li> <li class="toctree-l3"><a class="reference internal" href="#stageinmode">stageInMode</a></li> <li class="toctree-l3"><a class="reference internal" href="#stageoutmode">stageOutMode</a></li> <li class="toctree-l3"><a class="reference internal" href="#storedir">storeDir</a></li> <li class="toctree-l3"><a class="reference internal" href="#tag">tag</a></li> <li class="toctree-l3"><a class="reference internal" href="#time">time</a></li> </ul> </li> </ul> </li> <li class="toctree-l1"><a class="reference internal" href="channel.html">Channel factories</a></li> <li class="toctree-l1"><a class="reference internal" href="operator.html">Operators</a></li> </ul> <p class="caption" role="heading"><span class="caption-text">Updates</span></p> <ul> <li class="toctree-l1"><a class="reference internal" href="../updating-nextflow.html">Updating Nextflow</a></li> <li class="toctree-l1"><a class="reference internal" href="../updating-syntax.html">Updating Nextflow syntax</a></li> <li class="toctree-l1"><a class="reference internal" href="../dsl1.html">Migrating from DSL1</a></li> </ul> <p class="caption" role="heading"><span class="caption-text">Contributing</span></p> <ul> <li class="toctree-l1"><a class="reference internal" href="../developer/index.html">Overview</a></li> <li class="toctree-l1"><a class="reference internal" href="../developer/diagram.html">Workflow Diagram</a></li> <li class="toctree-l1"><a class="reference internal" href="../developer/packages.html">Packages</a></li> <li class="toctree-l1"><a class="reference internal" href="../developer/plugins.html">Plugins</a></li> </ul> <p class="caption" role="heading"><span class="caption-text">Tutorials</span></p> <ul> <li class="toctree-l1"><a class="reference internal" href="../flux.html">Using Nextflow with Flux</a></li> <li class="toctree-l1"><a class="reference internal" href="../metrics.html">Understanding task resource metrics</a></li> </ul> </div> <div class="nav-footer-logo"> <a href="https://seqera.io/" target="_blank" title="Developed by Seqera Labs"> Nextflow is developed by:<br> <img src="../_static/seqera-logo.svg" alt="Seqera Labs"> </a> </div> </div> </nav> <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" > <i data-toggle="wy-nav-top" class="fa fa-bars"></i> <a href="../index.html">Nextflow</a> </nav> <div class="wy-nav-content"> <div class="rst-content"> <div role="navigation" aria-label="Page navigation"> <ul class="wy-breadcrumbs"> <li><a href="../index.html" class="icon icon-home"></a></li> <li class="breadcrumb-item active">Process reference</li> <li class="wy-breadcrumbs-aside"> <a href="https://github.com/nextflow-io/nextflow/blob/master/docs/reference/process.md" class="fa fa-github"> Edit on GitHub</a> </li> </ul> <hr/> </div> <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article"> <div itemprop="articleBody"> <section class="tex2jax_ignore mathjax_ignore" id="process-reference"> <span id="id1"></span><h1>Process reference<a class="headerlink" href="#process-reference" title="Permalink to this heading"></a></h1> <p>This page lists the task properties, input/output methods, and directives available in <a class="reference internal" href="../process.html#process-page"><span class="std std-ref">process</span></a> definitions.</p> <section id="task-properties"> <h2>Task properties<a class="headerlink" href="#task-properties" title="Permalink to this heading"></a></h2> <p>The following task properties are defined in the process body:</p> <dl class="simple myst"> <dt><code class="docutils literal notranslate"><span class="pre">task.attempt</span></code></dt><dd><p>The current task attempt.</p> </dd> <dt><code class="docutils literal notranslate"><span class="pre">task.exitStatus</span></code></dt><dd><p>The exit code of the task script. Only applicable for processes with a <code class="docutils literal notranslate"><span class="pre">script:</span></code> or <code class="docutils literal notranslate"><span class="pre">shell:</span></code> block.</p> </dd> <dd><p>Since the exit code is only available after the task has been executed, it can only be used by certain process directives such as <a class="reference internal" href="#errorstrategy"><span class="std std-doc">errorStrategy</span></a>.</p> </dd> <dt><code class="docutils literal notranslate"><span class="pre">task.hash</span></code></dt><dd><p><em>Available only in <code class="docutils literal notranslate"><span class="pre">exec:</span></code> blocks</em></p> </dd> <dd><p>The task unique hash ID.</p> </dd> <dt><code class="docutils literal notranslate"><span class="pre">task.id</span></code></dt><dd><p>The pipeline-level task index. Corresponds to <code class="docutils literal notranslate"><span class="pre">task_id</span></code> in the <a class="reference internal" href="../reports.html#trace-report"><span class="std std-ref">execution trace</span></a>.</p> </dd> <dt><code class="docutils literal notranslate"><span class="pre">task.index</span></code></dt><dd><p>The process-level task index.</p> </dd> <dt><code class="docutils literal notranslate"><span class="pre">task.name</span></code></dt><dd><p><em>Available only in <code class="docutils literal notranslate"><span class="pre">exec:</span></code> blocks</em></p> </dd> <dd><p>The current task name.</p> </dd> <dt><code class="docutils literal notranslate"><span class="pre">task.previousException</span></code></dt><dd><div class="versionadded"> <p><span class="versionmodified added">New in version 24.10.0.</span></p> </div> </dd> <dd><p>The exception reported by the previous task attempt.</p> </dd> <dd><p>Since the exception is available after a failed task attempt, it can only be accessed when retrying a failed task execution, and therefore when <code class="docutils literal notranslate"><span class="pre">task.attempt</span></code> is greater than 1.</p> </dd> <dt><code class="docutils literal notranslate"><span class="pre">task.previousTrace</span></code></dt><dd><div class="versionadded"> <p><span class="versionmodified added">New in version 24.10.0.</span></p> </div> </dd> <dd><p>The trace record associated with the previous task attempt.</p> </dd> <dd><p>Since the trace record is available after a failed task attempt, it can only be accessed when retrying a failed task execution, and therefore when <code class="docutils literal notranslate"><span class="pre">task.attempt</span></code> is greater than 1.</p> </dd> <dd><p>This is useful when retrying a task execution to access the previous task attempt runtime metrics e.g. used memory and CPUs.</p> </dd> <dt><code class="docutils literal notranslate"><span class="pre">task.process</span></code></dt><dd><p>The current process name.</p> </dd> <dt><code class="docutils literal notranslate"><span class="pre">task.workDir</span></code></dt><dd><p><em>Available only in <code class="docutils literal notranslate"><span class="pre">exec:</span></code> blocks</em></p> </dd> <dd><p>The task unique directory.</p> </dd> </dl> <p>Additionally, the <a class="reference internal" href="#directives"><span class="std std-doc">directive values</span></a> for the given task can be accessed via <code class="docutils literal notranslate"><span class="pre">task.<directive></span></code>.</p> </section> <section id="inputs"> <span id="process-reference-inputs"></span><h2>Inputs<a class="headerlink" href="#inputs" title="Permalink to this heading"></a></h2> <dl class="simple myst"> <dt><code class="docutils literal notranslate"><span class="pre">val(</span> <span class="pre">identifier</span> <span class="pre">)</span></code></dt><dd><p>Declare a variable input. The received value can be any type, and it will be made available to the process body (i.e. <code class="docutils literal notranslate"><span class="pre">script</span></code>, <code class="docutils literal notranslate"><span class="pre">shell</span></code>, <code class="docutils literal notranslate"><span class="pre">exec</span></code>) as a variable given by <code class="docutils literal notranslate"><span class="pre">identifier</span></code>.</p> </dd> <dt><code class="docutils literal notranslate"><span class="pre">file(</span> <span class="pre">identifier</span> <span class="pre">|</span> <span class="pre">stageName</span> <span class="pre">)</span></code></dt><dd><div class="deprecated"> <p><span class="versionmodified deprecated">Deprecated since version 19.10.0: </span>Use <code class="docutils literal notranslate"><span class="pre">path</span></code> instead.</p> </div> </dd> <dd><p>Declare a file input. The received value can be any type, and it will be staged into the task directory. If the received value is not a file or collection of files, it is implicitly converted to a string and written to a file.</p> </dd> <dd><p>The argument can be an identifier or string. If an identifier, the received value will be made available to the process body as a variable. If a string, the received value will be staged into the task directory under the given alias.</p> </dd> <dt><code class="docutils literal notranslate"><span class="pre">path(</span> <span class="pre">identifier</span> <span class="pre">|</span> <span class="pre">stageName</span> <span class="pre">)</span></code></dt><dd><p>Declare a file input. The received value should be a file or collection of files and will be staged into the task directory.</p> </dd> <dd><p>The argument can be an identifier or string. If an identifier, the received value will be made available to the process body as a variable. If a string, the received value will be staged into the task directory under the given alias.</p> </dd> <dd><p>Available options:</p> <dl class="simple myst"> <dt><code class="docutils literal notranslate"><span class="pre">arity</span></code></dt><dd><div class="versionadded"> <p><span class="versionmodified added">New in version 23.09.0-edge.</span></p> </div> </dd> <dd><p>Specify the number of expected files. Can be a number, e.g. <code class="docutils literal notranslate"><span class="pre">'1'</span></code>, or a range, e.g. <code class="docutils literal notranslate"><span class="pre">'1..*'</span></code>. If a task receives an invalid number of files for this <code class="docutils literal notranslate"><span class="pre">path</span></code> input, it will fail.</p> </dd> <dt><code class="docutils literal notranslate"><span class="pre">name</span></code></dt><dd><p>Specify how the file should be named in the task work directory. Can be a name or a pattern.</p> </dd> <dt><code class="docutils literal notranslate"><span class="pre">stageAs</span></code></dt><dd><p>Alias of <code class="docutils literal notranslate"><span class="pre">name</span></code>.</p> </dd> </dl> </dd> <dt><code class="docutils literal notranslate"><span class="pre">env(</span> <span class="pre">name</span> <span class="pre">)</span></code></dt><dd><p>Declare an environment variable input. The received value should be a string, and it will be exported to the task environment as an environment variable given by <code class="docutils literal notranslate"><span class="pre">name</span></code>.</p> </dd> <dt><code class="docutils literal notranslate"><span class="pre">stdin</span></code></dt><dd><p>Declare a <code class="docutils literal notranslate"><span class="pre">stdin</span></code> input. The received value should be a string, and it will be provided as the standard input (i.e. <code class="docutils literal notranslate"><span class="pre">stdin</span></code>) to the task script. It should be declared only once for a process.</p> </dd> <dt><code class="docutils literal notranslate"><span class="pre">tuple(</span> <span class="pre">arg1,</span> <span class="pre">arg2,</span> <span class="pre">...</span> <span class="pre">)</span></code></dt><dd><p>Declare a tuple input. Each argument should be an input declaration such as <code class="docutils literal notranslate"><span class="pre">val</span></code>, <code class="docutils literal notranslate"><span class="pre">path</span></code>, <code class="docutils literal notranslate"><span class="pre">env</span></code>, or <code class="docutils literal notranslate"><span class="pre">stdin</span></code>.</p> </dd> <dd><p>The received value should be a tuple with the same number of elements as the <code class="docutils literal notranslate"><span class="pre">tuple</span></code> declaration, and each received element should be compatible with the corresponding <code class="docutils literal notranslate"><span class="pre">tuple</span></code> argument. Each tuple element is treated the same way as if it were a standalone input.</p> </dd> </dl> </section> <section id="outputs"> <span id="process-reference-outputs"></span><h2>Outputs<a class="headerlink" href="#outputs" title="Permalink to this heading"></a></h2> <dl class="simple myst"> <dt><code class="docutils literal notranslate"><span class="pre">val(</span> <span class="pre">value</span> <span class="pre">)</span></code></dt><dd><p>Declare a variable output. The argument can be any value, and it can reference any output variables defined in the process body (i.e. variables declared without the <code class="docutils literal notranslate"><span class="pre">def</span></code> keyword).</p> </dd> <dt><code class="docutils literal notranslate"><span class="pre">file(</span> <span class="pre">pattern</span> <span class="pre">)</span></code></dt><dd><div class="deprecated"> <p><span class="versionmodified deprecated">Deprecated since version 19.10.0: </span>Use <code class="docutils literal notranslate"><span class="pre">path</span></code> instead.</p> </div> </dd> <dd><p>Declare a file output. It receives the output files from the task environment that match the given pattern.</p> </dd> <dd><p>Multiple patterns can be specified using the colon separator (<code class="docutils literal notranslate"><span class="pre">:</span></code>). The union of all files matched by each pattern will be collected.</p> </dd> <dt><code class="docutils literal notranslate"><span class="pre">path(</span> <span class="pre">pattern,</span> <span class="pre">[options]</span> <span class="pre">)</span></code></dt><dd><p>Declare a file output. It receives the output files from the task environment that match the given pattern.</p> </dd> <dd><p>Available options:</p> <dl class="simple myst"> <dt><code class="docutils literal notranslate"><span class="pre">arity</span></code></dt><dd><div class="versionadded"> <p><span class="versionmodified added">New in version 23.09.0-edge.</span></p> </div> </dd> <dd><p>Specify the number of expected files. Can be a number or a range. If a task produces an invalid number of files for this <code class="docutils literal notranslate"><span class="pre">path</span></code> output, it will fail.</p> </dd> <dd><p>If the arity is <code class="docutils literal notranslate"><span class="pre">1</span></code>, a single file will be emitted. Otherwise, a list will always be emitted, even if only one file is produced.</p> </dd> <dd><div class="admonition warning"> <p class="admonition-title">Warning</p> <p>If the arity is not specified, a single file or list will be emitted based on whether a single file or multiple files are produced at runtime, resulting potentially in an output channel with a mixture of files and file collections.</p> </div> </dd> <dt><code class="docutils literal notranslate"><span class="pre">followLinks</span></code></dt><dd><p>When <code class="docutils literal notranslate"><span class="pre">true</span></code>, target files are returned in place of any matching symlink (default: <code class="docutils literal notranslate"><span class="pre">true</span></code>).</p> </dd> <dt><code class="docutils literal notranslate"><span class="pre">glob</span></code></dt><dd><p>When <code class="docutils literal notranslate"><span class="pre">true</span></code>, the specified name is interpreted as a glob pattern (default: <code class="docutils literal notranslate"><span class="pre">true</span></code>).</p> </dd> <dt><code class="docutils literal notranslate"><span class="pre">hidden</span></code></dt><dd><p>When <code class="docutils literal notranslate"><span class="pre">true</span></code>, hidden files are included in the matching output files (default: <code class="docutils literal notranslate"><span class="pre">false</span></code>).</p> </dd> <dt><code class="docutils literal notranslate"><span class="pre">includeInputs</span></code></dt><dd><p>When <code class="docutils literal notranslate"><span class="pre">true</span></code> and the output path is a glob pattern, any input files matching the pattern are also included in the output (default: <code class="docutils literal notranslate"><span class="pre">false</span></code>).</p> </dd> <dt><code class="docutils literal notranslate"><span class="pre">maxDepth</span></code></dt><dd><p>Maximum number of directory levels to visit (default: no limit).</p> </dd> <dt><code class="docutils literal notranslate"><span class="pre">type</span></code></dt><dd><p>Type of paths returned, either <code class="docutils literal notranslate"><span class="pre">file</span></code>, <code class="docutils literal notranslate"><span class="pre">dir</span></code> or <code class="docutils literal notranslate"><span class="pre">any</span></code> (default: <code class="docutils literal notranslate"><span class="pre">any</span></code>, or <code class="docutils literal notranslate"><span class="pre">file</span></code> if the specified file name pattern contains a double star (<code class="docutils literal notranslate"><span class="pre">**</span></code>)).</p> </dd> </dl> </dd> <dt><code class="docutils literal notranslate"><span class="pre">env(</span> <span class="pre">name</span> <span class="pre">)</span></code></dt><dd><p>Declare an environment variable output. It receives the value of the environment variable (given by <code class="docutils literal notranslate"><span class="pre">name</span></code>) from the task environment.</p> </dd> <dd><div class="versionchanged"> <p><span class="versionmodified changed">Changed in version 23.12.0-edge: </span>Prior to this version, if the environment variable contained multiple lines of output, the output would be compressed to a single line by converting newlines to spaces.</p> </div> </dd> <dt><code class="docutils literal notranslate"><span class="pre">stdout</span></code></dt><dd><p>Declare a <code class="docutils literal notranslate"><span class="pre">stdout</span></code> output. It receives the standard output of the task script.</p> </dd> <dt><code class="docutils literal notranslate"><span class="pre">eval(</span> <span class="pre">command</span> <span class="pre">)</span></code></dt><dd><div class="versionadded"> <p><span class="versionmodified added">New in version 24.02.0-edge.</span></p> </div> </dd> <dd><p>Declare an <code class="docutils literal notranslate"><span class="pre">eval</span></code> output. It receives the standard output of the given command, which is executed in the task environment after the task script.</p> </dd> <dd><p>If the command fails, the task will also fail.</p> </dd> <dt><code class="docutils literal notranslate"><span class="pre">tuple(</span> <span class="pre">arg1,</span> <span class="pre">arg2,</span> <span class="pre">...</span> <span class="pre">)</span></code></dt><dd><p>Declare a tuple output. Each argument should be an output declaration such as <code class="docutils literal notranslate"><span class="pre">val</span></code>, <code class="docutils literal notranslate"><span class="pre">path</span></code>, <code class="docutils literal notranslate"><span class="pre">env</span></code>, <code class="docutils literal notranslate"><span class="pre">stdin</span></code>, or <code class="docutils literal notranslate"><span class="pre">eval</span></code>. Each tuple element is treated the same way as if it were a standalone output.</p> </dd> </dl> <section id="generic-options"> <span id="process-additional-options"></span><h3>Generic options<a class="headerlink" href="#generic-options" title="Permalink to this heading"></a></h3> <p>The following options are available for all process outputs:</p> <dl class="simple myst"> <dt><code class="docutils literal notranslate"><span class="pre">emit:</span> <span class="pre"><name></span></code></dt><dd><p>Defines the name of the output channel.</p> </dd> <dt><code class="docutils literal notranslate"><span class="pre">optional:</span> <span class="pre">true</span> <span class="pre">|</span> <span class="pre">false</span></code></dt><dd><p>When <code class="docutils literal notranslate"><span class="pre">true</span></code>, the task will not fail if the specified output is missing (default: <code class="docutils literal notranslate"><span class="pre">false</span></code>).</p> </dd> <dt><code class="docutils literal notranslate"><span class="pre">topic:</span> <span class="pre"><name></span></code></dt><dd><div class="versionadded"> <p><span class="versionmodified added">New in version 23.11.0-edge.</span></p> </div> </dd> <dd><p><em>Experimental: may change in a future release.</em></p> </dd> <dd><p>Defines the <a class="reference internal" href="channel.html#channel-topic"><span class="std std-ref">channel topic</span></a> to which the output will be sent.</p> </dd> </dl> </section> </section> <section id="directives"> <span id="process-reference-directives"></span><h2>Directives<a class="headerlink" href="#directives" title="Permalink to this heading"></a></h2> <section id="accelerator"> <span id="process-accelerator"></span><h3>accelerator<a class="headerlink" href="#accelerator" title="Permalink to this heading"></a></h3> <div class="versionadded"> <p><span class="versionmodified added">New in version 19.09.0-edge.</span></p> </div> <p>The <code class="docutils literal notranslate"><span class="pre">accelerator</span></code> directive allows you to request hardware accelerators (e.g. GPUs) for the task execution. For example:</p> <div class="highlight-nextflow notranslate"><div class="highlight"><pre><span></span><span class="kd">process</span><span class="w"> </span><span class="n">foo</span><span class="w"> </span><span class="o">{</span> <span class="w"> </span><span class="n">accelerator</span><span class="w"> </span><span class="mi">4</span><span class="o">,</span><span class="w"> </span><span class="nl">type:</span><span class="w"> </span><span class="s1">'nvidia-tesla-k80'</span> <span class="w"> </span><span class="nl">script:</span> <span class="w"> </span><span class="s2">"""</span> <span class="s2"> your_gpu_enabled --command --line</span> <span class="s2"> """</span> <span class="o">}</span> </pre></div> </div> <p>The above examples will request 4 GPUs of type <code class="docutils literal notranslate"><span class="pre">nvidia-tesla-k80</span></code>.</p> <div class="admonition note"> <p class="admonition-title">Note</p> <p>This directive is only used by certain executors. Refer to the <a class="reference internal" href="../executor.html#executor-page"><span class="std std-ref">Executors</span></a> page to see which executors support this directive.</p> </div> <div class="admonition note"> <p class="admonition-title">Note</p> <p>Additional options may be required to fully enable the use of accelerators. When using containers with GPUs, you must pass the GPU drivers through to the container. For Docker, this requires the option <code class="docutils literal notranslate"><span class="pre">--gpus</span> <span class="pre">all</span></code> in the docker run command. For Apptainer/Singularity, this requires the option <code class="docutils literal notranslate"><span class="pre">--nv</span></code>. The specific implementation details depend on the accelerator and container type being used.</p> </div> <div class="admonition note"> <p class="admonition-title">Note</p> <p>The accelerator <code class="docutils literal notranslate"><span class="pre">type</span></code> option depends on the target execution platform. Refer to the platform-specific documentation for details on the available accelerators:</p> <ul class="simple"> <li><p><a class="reference external" href="https://cloud.google.com/compute/docs/gpus/">Google Cloud</a></p></li> <li><p><a class="reference external" href="https://kubernetes.io/docs/tasks/manage-gpus/scheduling-gpus/#clusters-containing-different-types-of-gpus">Kubernetes</a></p></li> </ul> <p>The accelerator <code class="docutils literal notranslate"><span class="pre">type</span></code> option is not supported for AWS Batch. You can control the accelerator type indirectly through the allowed instance types in your Compute Environment. See the <a class="reference external" href="https://aws.amazon.com/batch/faqs/?#GPU_Scheduling_">AWS Batch FAQs</a> for more information.</p> </div> </section> <section id="afterscript"> <span id="process-afterscript"></span><h3>afterScript<a class="headerlink" href="#afterscript" title="Permalink to this heading"></a></h3> <p>The <code class="docutils literal notranslate"><span class="pre">afterScript</span></code> directive allows you to execute a custom (Bash) snippet immediately <em>after</em> the main process has run. This may be useful to clean up your staging area.</p> <div class="admonition note"> <p class="admonition-title">Note</p> <p>When combined with the <a class="reference internal" href="#process-container"><span class="std std-ref">container directive</span></a>, the <code class="docutils literal notranslate"><span class="pre">afterScript</span></code> will be executed outside the specified container. In other words, the <code class="docutils literal notranslate"><span class="pre">afterScript</span></code> is always executed in the host environment.</p> </div> </section> <section id="arch"> <span id="process-arch"></span><h3>arch<a class="headerlink" href="#arch" title="Permalink to this heading"></a></h3> <p>The <code class="docutils literal notranslate"><span class="pre">arch</span></code> directive allows you to define the CPU architecture to build the software in use by the process’ task. For example:</p> <div class="highlight-nextflow notranslate"><div class="highlight"><pre><span></span><span class="kd">process</span><span class="w"> </span><span class="n">cpu_task</span><span class="w"> </span><span class="o">{</span> <span class="w"> </span><span class="n">spack</span><span class="w"> </span><span class="s1">'blast-plus@2.13.0'</span> <span class="w"> </span><span class="n">arch</span><span class="w"> </span><span class="s1">'linux/x86_64'</span><span class="o">,</span><span class="w"> </span><span class="nl">target:</span><span class="w"> </span><span class="s1">'cascadelake'</span> <span class="w"> </span><span class="nl">script:</span> <span class="w"> </span><span class="s2">"""</span> <span class="s2"> blastp -query input_sequence -num_threads ${task.cpus}</span> <span class="s2"> """</span> <span class="o">}</span> </pre></div> </div> <p>The example above declares that the CPU generic architecture is <code class="docutils literal notranslate"><span class="pre">linux/x86_64</span></code> (X86 64 bit), and more specifically that the microarchitecture is <code class="docutils literal notranslate"><span class="pre">cascadelake</span></code> (a specific generation of Intel CPUs).</p> <p>This directive is currently used by the following Nextflow functionalities:</p> <ul class="simple"> <li><p>by the <a class="reference internal" href="#spack"><span class="std std-doc">spack</span></a> directive, to build microarchitecture-optimised applications;</p></li> <li><p>by the <a class="reference internal" href="../wave.html#wave-page"><span class="std std-ref">Wave containers</span></a> service, to build containers for one of the generic families of CPU architectures (see below);</p></li> <li><p>by the <code class="docutils literal notranslate"><span class="pre">spack</span></code> strategy within <a class="reference internal" href="../wave.html#wave-page"><span class="std std-ref">Wave containers</span></a>, to optimise the container builds for specific CPU microarchitectures.</p></li> </ul> <p>Allowed values for the <code class="docutils literal notranslate"><span class="pre">arch</span></code> directive are as follows, grouped by equivalent family (choices available for the sake of compatibility):</p> <ul class="simple"> <li><p>X86 64 bit: <code class="docutils literal notranslate"><span class="pre">linux/x86_64</span></code>, <code class="docutils literal notranslate"><span class="pre">x86_64</span></code>, <code class="docutils literal notranslate"><span class="pre">linux/amd64</span></code>, <code class="docutils literal notranslate"><span class="pre">amd64</span></code></p></li> <li><p>ARM 64 bit: <code class="docutils literal notranslate"><span class="pre">linux/aarch64</span></code>, <code class="docutils literal notranslate"><span class="pre">aarch64</span></code>, <code class="docutils literal notranslate"><span class="pre">linux/arm64</span></code>, <code class="docutils literal notranslate"><span class="pre">arm64</span></code>, <code class="docutils literal notranslate"><span class="pre">linux/arm64/v8</span></code></p></li> <li><p>ARM 64 bit, older generation: <code class="docutils literal notranslate"><span class="pre">linux/arm64/v7</span></code></p></li> </ul> <p>Examples of values for the architecture <code class="docutils literal notranslate"><span class="pre">target</span></code> option are <code class="docutils literal notranslate"><span class="pre">cascadelake</span></code>, <code class="docutils literal notranslate"><span class="pre">icelake</span></code>, <code class="docutils literal notranslate"><span class="pre">zen2</span></code> and <code class="docutils literal notranslate"><span class="pre">zen3</span></code>. See the <a class="reference external" href="https://spack.readthedocs.io/en/latest/basic_usage.html#support-for-specific-microarchitectures">Spack documentation</a> for the full and up-to-date list of meaningful targets.</p> </section> <section id="array"> <span id="process-array"></span><h3>array<a class="headerlink" href="#array" title="Permalink to this heading"></a></h3> <div class="versionadded"> <p><span class="versionmodified added">New in version 24.04.0.</span></p> </div> <div class="admonition warning"> <p class="admonition-title">Warning</p> <p><em>Experimental: may change in a future release.</em></p> </div> <p>The <code class="docutils literal notranslate"><span class="pre">array</span></code> directive allows you to submit tasks as <em>job arrays</em> for executors that support it.</p> <p>A job array is a collection of jobs with the same resource requirements and the same script (parameterized by an index). Job arrays incur significantly less scheduling overhead compared to individual jobs, and as a result they are preferred by HPC schedulers where possible.</p> <p>The directive should be specified with a given array size, along with an executor that supports job arrays. For example:</p> <div class="highlight-nextflow notranslate"><div class="highlight"><pre><span></span><span class="kd">process</span><span class="w"> </span><span class="n">cpu_task</span><span class="w"> </span><span class="o">{</span> <span class="w"> </span><span class="n">executor</span><span class="w"> </span><span class="s1">'slurm'</span> <span class="w"> </span><span class="n">array</span><span class="w"> </span><span class="mi">100</span> <span class="w"> </span><span class="nl">script:</span> <span class="w"> </span><span class="s2">"""</span> <span class="s2"> your_command --here</span> <span class="s2"> """</span> <span class="o">}</span> </pre></div> </div> <p>Nextflow currently supports job arrays for the following executors:</p> <ul class="simple"> <li><p><a class="reference internal" href="../executor.html#awsbatch-executor"><span class="std std-ref">AWS Batch</span></a></p></li> <li><p><a class="reference internal" href="../executor.html#google-batch-executor"><span class="std std-ref">Google Cloud Batch</span></a></p></li> <li><p><a class="reference internal" href="../executor.html#lsf-executor"><span class="std std-ref">LSF</span></a></p></li> <li><p><a class="reference internal" href="../executor.html#pbs-executor"><span class="std std-ref">PBS/Torque</span></a></p></li> <li><p><a class="reference internal" href="../executor.html#pbspro-executor"><span class="std std-ref">PBS Pro</span></a></p></li> <li><p><a class="reference internal" href="../executor.html#sge-executor"><span class="std std-ref">SGE</span></a></p></li> <li><p><a class="reference internal" href="../executor.html#slurm-executor"><span class="std std-ref">SLURM</span></a></p></li> </ul> <p>A process using job arrays will collect tasks and submit each batch as a job array when it is ready. Any “leftover” tasks will be submitted as a partial job array.</p> <p>Once a job array is submitted, each “child” task is executed as an independent job. Any tasks that fail (and can be retried) will be retried without interfering with the tasks that succeeded. Retried tasks are submitted individually rather than through a job array, in order to allow for the use of <a class="reference internal" href="../process.html#dynamic-task-resources"><span class="std std-ref">dynamic resources</span></a>.</p> <p>The following directives must be uniform across all tasks in a process that uses job arrays, because these directives are specified once for the entire job array:</p> <ul class="simple"> <li><p><a class="reference internal" href="#process-accelerator"><span class="std std-ref">accelerator</span></a></p></li> <li><p><a class="reference internal" href="#process-clusteroptions"><span class="std std-ref">clusterOptions</span></a></p></li> <li><p><a class="reference internal" href="#process-cpus"><span class="std std-ref">cpus</span></a></p></li> <li><p><a class="reference internal" href="#process-disk"><span class="std std-ref">disk</span></a></p></li> <li><p><a class="reference internal" href="#process-machinetype"><span class="std std-ref">machineType</span></a></p></li> <li><p><a class="reference internal" href="#process-memory"><span class="std std-ref">memory</span></a></p></li> <li><p><a class="reference internal" href="#process-queue"><span class="std std-ref">queue</span></a></p></li> <li><p><a class="reference internal" href="#process-resourcelabels"><span class="std std-ref">resourceLabels</span></a></p></li> <li><p><a class="reference internal" href="#process-resourcelimits"><span class="std std-ref">resourceLimits</span></a></p></li> <li><p><a class="reference internal" href="#process-time"><span class="std std-ref">time</span></a></p></li> </ul> <p>For cloud-based executors like AWS Batch, or when using Fusion with any executor, the following additional directives must be uniform:</p> <ul class="simple"> <li><p><a class="reference internal" href="#process-container"><span class="std std-ref">container</span></a></p></li> <li><p><a class="reference internal" href="#process-containeroptions"><span class="std std-ref">containerOptions</span></a></p></li> </ul> <p>When using Wave, the following additional directives must be uniform:</p> <ul class="simple"> <li><p><a class="reference internal" href="#process-conda"><span class="std std-ref">conda</span></a></p></li> </ul> </section> <section id="beforescript"> <span id="process-beforescript"></span><h3>beforeScript<a class="headerlink" href="#beforescript" title="Permalink to this heading"></a></h3> <p>The <code class="docutils literal notranslate"><span class="pre">beforeScript</span></code> directive allows you to execute a custom (Bash) snippet <em>before</em> the main process script is run. This may be useful to initialise the underlying cluster environment or for other custom initialisation.</p> <p>For example:</p> <div class="highlight-nextflow notranslate"><div class="highlight"><pre><span></span><span class="kd">process</span><span class="w"> </span><span class="n">foo</span><span class="w"> </span><span class="o">{</span> <span class="w"> </span><span class="n">beforeScript</span><span class="w"> </span><span class="s1">'source /cluster/bin/setup'</span> <span class="w"> </span><span class="nl">script:</span> <span class="w"> </span><span class="s2">"""</span> <span class="s2"> echo bar</span> <span class="s2"> """</span> <span class="o">}</span> </pre></div> </div> <p>When the process is containerized (using the <a class="reference internal" href="#process-container"><span class="std std-ref">container</span></a> directive), the <code class="docutils literal notranslate"><span class="pre">beforeScript</span></code> will be executed in the container only if the executor is <em>container-native</em> (e.g. cloud batch executors, Kubernetes). Otherwise, the <code class="docutils literal notranslate"><span class="pre">beforeScript</span></code> will be executed outside the container.</p> </section> <section id="cache"> <span id="process-cache"></span><h3>cache<a class="headerlink" href="#cache" title="Permalink to this heading"></a></h3> <p>The <code class="docutils literal notranslate"><span class="pre">cache</span></code> directive allows you to store the process results to a local cache. When the cache is enabled <em>and</em> the pipeline is launched with the <a class="reference internal" href="../your-first-script.html#getstarted-resume"><span class="std std-ref">resume</span></a> option, any task executions that are already cached will be re-used. See the <a class="reference internal" href="../cache-and-resume.html#cache-resume-page"><span class="std std-ref">Caching and resuming</span></a> page for more information about how the cache works.</p> <p>The cache is enabled by default, but you can disable it for a specific process by setting the <code class="docutils literal notranslate"><span class="pre">cache</span></code> directive to <code class="docutils literal notranslate"><span class="pre">false</span></code>. For example:</p> <div class="highlight-nextflow notranslate"><div class="highlight"><pre><span></span><span class="kd">process</span><span class="w"> </span><span class="n">noCacheThis</span><span class="w"> </span><span class="o">{</span> <span class="w"> </span><span class="n">cache</span><span class="w"> </span><span class="kc">false</span> <span class="w"> </span><span class="c1">// ...</span> <span class="o">}</span> </pre></div> </div> <p>The following options are available:</p> <dl class="simple myst"> <dt><code class="docutils literal notranslate"><span class="pre">false</span></code></dt><dd><p>Disable caching.</p> </dd> <dt><code class="docutils literal notranslate"><span class="pre">true</span></code> (default)</dt><dd><p>Enable caching. Input file metadata (name, size, last updated timestamp) are included in the cache keys.</p> </dd> <dt><code class="docutils literal notranslate"><span class="pre">'deep'</span></code></dt><dd><p>Enable caching. Input file content is included in the cache keys.</p> </dd> <dt><code class="docutils literal notranslate"><span class="pre">'lenient'</span></code></dt><dd><p>Enable caching. Minimal input file metadata (name and size only) are included in the cache keys.</p> </dd> <dd><p>This strategy provides a workaround for incorrect caching invalidation observed on shared file systems due to inconsistent file timestamps.</p> </dd> </dl> </section> <section id="clusteroptions"> <span id="process-clusteroptions"></span><h3>clusterOptions<a class="headerlink" href="#clusteroptions" title="Permalink to this heading"></a></h3> <p>The <code class="docutils literal notranslate"><span class="pre">clusterOptions</span></code> directive allows the usage of any native configuration option accepted by your cluster submit command. You can use it to request non-standard resources or use settings that are specific to your cluster and not supported out of the box by Nextflow.</p> <p>The cluster options can be a string:</p> <div class="highlight-nextflow notranslate"><div class="highlight"><pre><span></span><span class="kd">process</span><span class="w"> </span><span class="n">foo</span><span class="w"> </span><span class="o">{</span> <span class="w"> </span><span class="n">clusterOptions</span><span class="w"> </span><span class="s1">'-x 1 -y 2'</span> <span class="w"> </span><span class="c1">// ...</span> <span class="o">}</span> </pre></div> </div> <div class="versionchanged"> <p><span class="versionmodified changed">Changed in version 24.04.0: </span>Prior to this version, grid executors that require each option to be on a separate line in the job script would attempt to split multiple options using a variety of different conventions. Multiple options can now be specified more clearly using a string list as shown below.</p> </div> <p>The cluster options can also be a string list:</p> <div class="highlight-nextflow notranslate"><div class="highlight"><pre><span></span><span class="kd">process</span><span class="w"> </span><span class="n">foo</span><span class="w"> </span><span class="o">{</span> <span class="w"> </span><span class="n">clusterOptions</span><span class="w"> </span><span class="s1">'-x 1'</span><span class="o">,</span><span class="w"> </span><span class="s1">'-y 2'</span><span class="o">,</span><span class="w"> </span><span class="s1">'--flag'</span> <span class="w"> </span><span class="c1">// ...</span> <span class="o">}</span> </pre></div> </div> <p>Grid executors that require one option per line will write each option to a separate line, while grid executors that allow multiple options per line will write all options to a single line, the same as with a string. This form is useful to control how the options are split across lines when it is required by the scheduler.</p> <div class="admonition note"> <p class="admonition-title">Note</p> <p>This directive is only used by grid executors. Refer to the <a class="reference internal" href="../executor.html#executor-page"><span class="std std-ref">Executors</span></a> page to see which executors support this directive.</p> </div> <div class="admonition warning"> <p class="admonition-title">Warning</p> <p>While you can use the <code class="docutils literal notranslate"><span class="pre">clusterOptions</span></code> directive to specify options that are supported as process directives (<code class="docutils literal notranslate"><span class="pre">queue</span></code>, <code class="docutils literal notranslate"><span class="pre">memory</span></code>, <code class="docutils literal notranslate"><span class="pre">time</span></code>, etc), you should not use both at the same time, as it will cause undefined behavior. Most HPC schedulers will either fail or simply ignore one or the other.</p> </div> </section> <section id="conda"> <span id="process-conda"></span><h3>conda<a class="headerlink" href="#conda" title="Permalink to this heading"></a></h3> <p>The <code class="docutils literal notranslate"><span class="pre">conda</span></code> directive allows for the definition of the process dependencies using the <a class="reference external" href="https://conda.io">Conda</a> package manager.</p> <p>Nextflow automatically sets up an environment for the given package names listed by in the <code class="docutils literal notranslate"><span class="pre">conda</span></code> directive. For example:</p> <div class="highlight-nextflow notranslate"><div class="highlight"><pre><span></span><span class="kd">process</span><span class="w"> </span><span class="n">foo</span><span class="w"> </span><span class="o">{</span> <span class="w"> </span><span class="n">conda</span><span class="w"> </span><span class="s1">'bwa=0.7.15'</span> <span class="w"> </span><span class="nl">script:</span> <span class="w"> </span><span class="s2">"""</span> <span class="s2"> your_command --here</span> <span class="s2"> """</span> <span class="o">}</span> </pre></div> </div> <p>Multiple packages can be specified separating them with a blank space e.g. <code class="docutils literal notranslate"><span class="pre">bwa=0.7.15</span> <span class="pre">fastqc=0.11.5</span></code>. The name of the channel from where a specific package needs to be downloaded can be specified using the usual Conda notation i.e. prefixing the package with the channel name as shown here <code class="docutils literal notranslate"><span class="pre">bioconda::bwa=0.7.15</span></code>.</p> <p>The <code class="docutils literal notranslate"><span class="pre">conda</span></code> directive also allows the specification of a Conda environment file path or the path of an existing environment directory. See the <a class="reference internal" href="../conda.html#conda-page"><span class="std std-ref">Conda environments</span></a> page for further details.</p> </section> <section id="container"> <span id="process-container"></span><h3>container<a class="headerlink" href="#container" title="Permalink to this heading"></a></h3> <p>The <code class="docutils literal notranslate"><span class="pre">container</span></code> directive allows you to execute the process script in a <a class="reference external" href="http://docker.io">Docker</a> container.</p> <p>It requires the Docker daemon to be running in machine where the pipeline is executed, i.e. the local machine when using the <em>local</em> executor or the cluster nodes when the pipeline is deployed through a <em>grid</em> executor.</p> <p>For example:</p> <div class="highlight-nextflow notranslate"><div class="highlight"><pre><span></span><span class="kd">process</span><span class="w"> </span><span class="n">runThisInDocker</span><span class="w"> </span><span class="o">{</span> <span class="w"> </span><span class="n">container</span><span class="w"> </span><span class="s1">'dockerbox:tag'</span> <span class="w"> </span><span class="nl">script:</span> <span class="w"> </span><span class="s2">"""</span> <span class="s2"> your_command --here</span> <span class="s2"> """</span> <span class="o">}</span> </pre></div> </div> <p>Simply replace in the above script <code class="docutils literal notranslate"><span class="pre">dockerbox:tag</span></code> with the name of the Docker image you want to use.</p> <div class="admonition tip"> <p class="admonition-title">Tip</p> <p>Containers are a very useful way to execute your scripts in a reproducible self-contained environment or to run your pipeline in the cloud.</p> </div> <div class="admonition note"> <p class="admonition-title">Note</p> <p>This directive is ignored for processes that are <a class="reference internal" href="../process.html#process-native"><span class="std std-ref">executed natively</span></a>.</p> </div> </section> <section id="containeroptions"> <span id="process-containeroptions"></span><h3>containerOptions<a class="headerlink" href="#containeroptions" title="Permalink to this heading"></a></h3> <p>The <code class="docutils literal notranslate"><span class="pre">containerOptions</span></code> directive allows you to specify any container execution option supported by the underlying container engine (ie. Docker, Singularity, etc). This can be useful to provide container settings only for a specific process e.g. mount a custom path:</p> <div class="highlight-nextflow notranslate"><div class="highlight"><pre><span></span><span class="kd">process</span><span class="w"> </span><span class="n">runThisWithDocker</span><span class="w"> </span><span class="o">{</span> <span class="w"> </span><span class="n">container</span><span class="w"> </span><span class="s1">'busybox:latest'</span> <span class="w"> </span><span class="n">containerOptions</span><span class="w"> </span><span class="s1">'--volume /data/db:/db'</span> <span class="w"> </span><span class="kd">output</span><span class="o">:</span> <span class="w"> </span><span class="n">path</span><span class="w"> </span><span class="s1">'output.txt'</span> <span class="w"> </span><span class="nl">script:</span> <span class="w"> </span><span class="s2">"""</span> <span class="s2"> your_command --data /db > output.txt</span> <span class="s2"> """</span> <span class="o">}</span> </pre></div> </div> <div class="admonition warning"> <p class="admonition-title">Warning</p> <p>This feature is not supported by the <a class="reference internal" href="../executor.html#k8s-executor"><span class="std std-ref">Kubernetes</span></a> and <a class="reference internal" href="../executor.html#google-lifesciences-executor"><span class="std std-ref">Google Life Sciences</span></a> executors.</p> </div> </section> <section id="cpus"> <span id="process-cpus"></span><h3>cpus<a class="headerlink" href="#cpus" title="Permalink to this heading"></a></h3> <p>The <code class="docutils literal notranslate"><span class="pre">cpus</span></code> directive allows you to define the number of (logical) CPU required by the process’ task. For example:</p> <div class="highlight-nextflow notranslate"><div class="highlight"><pre><span></span><span class="kd">process</span><span class="w"> </span><span class="n">big_job</span><span class="w"> </span><span class="o">{</span> <span class="w"> </span><span class="n">cpus</span><span class="w"> </span><span class="mi">8</span> <span class="w"> </span><span class="n">executor</span><span class="w"> </span><span class="s1">'sge'</span> <span class="w"> </span><span class="nl">script:</span> <span class="w"> </span><span class="s2">"""</span> <span class="s2"> blastp -query input_sequence -num_threads ${task.cpus}</span> <span class="s2"> """</span> <span class="o">}</span> </pre></div> </div> <p>This directive is required for tasks that execute multi-process or multi-threaded commands/tools and it is meant to reserve enough CPUs when a pipeline task is executed through a cluster resource manager.</p> <p>See also: <a class="reference internal" href="#penv"><span class="std std-doc">penv</span></a>, <a class="reference internal" href="#memory"><span class="std std-doc">memory</span></a>, <a class="reference internal" href="#time"><span class="std std-doc">time</span></a>, <a class="reference internal" href="#queue"><span class="std std-doc">queue</span></a>, <a class="reference internal" href="#maxforks"><span class="std std-doc">maxForks</span></a></p> </section> <section id="debug"> <span id="process-debug"></span><h3>debug<a class="headerlink" href="#debug" title="Permalink to this heading"></a></h3> <p>By default the <code class="docutils literal notranslate"><span class="pre">stdout</span></code> produced by the commands executed in all processes is ignored. By setting the <code class="docutils literal notranslate"><span class="pre">debug</span></code> directive to <code class="docutils literal notranslate"><span class="pre">true</span></code>, you can forward the process <code class="docutils literal notranslate"><span class="pre">stdout</span></code> to the current top running process <code class="docutils literal notranslate"><span class="pre">stdout</span></code> file, showing it in the shell terminal.</p> <p>For example:</p> <div class="highlight-nextflow notranslate"><div class="highlight"><pre><span></span><span class="kd">process</span><span class="w"> </span><span class="n">sayHello</span><span class="w"> </span><span class="o">{</span> <span class="w"> </span><span class="n">debug</span><span class="w"> </span><span class="kc">true</span> <span class="w"> </span><span class="nl">script:</span> <span class="w"> </span><span class="s2">"""</span> <span class="s2"> echo Hello</span> <span class="s2"> """</span> <span class="o">}</span> </pre></div> </div> <div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">Hello</span> </pre></div> </div> <p>Without specifying <code class="docutils literal notranslate"><span class="pre">debug</span> <span class="pre">true</span></code>, you won’t see the <code class="docutils literal notranslate"><span class="pre">Hello</span></code> string printed out when executing the above example.</p> </section> <section id="disk"> <span id="process-disk"></span><h3>disk<a class="headerlink" href="#disk" title="Permalink to this heading"></a></h3> <p>The <code class="docutils literal notranslate"><span class="pre">disk</span></code> directive allows you to define how much local disk storage the process is allowed to use. For example:</p> <div class="highlight-nextflow notranslate"><div class="highlight"><pre><span></span><span class="kd">process</span><span class="w"> </span><span class="n">big_job</span><span class="w"> </span><span class="o">{</span> <span class="w"> </span><span class="n">disk</span><span class="w"> </span><span class="s1">'2 GB'</span> <span class="w"> </span><span class="n">executor</span><span class="w"> </span><span class="s1">'cirrus'</span> <span class="w"> </span><span class="nl">script:</span> <span class="w"> </span><span class="s2">"""</span> <span class="s2"> your_command --here</span> <span class="s2"> """</span> <span class="o">}</span> </pre></div> </div> <p>The following memory unit suffix can be used when specifying the disk value:</p> <table class="docutils align-default"> <thead> <tr class="row-odd"><th class="head"><p>Unit</p></th> <th class="head"><p>Description</p></th> </tr> </thead> <tbody> <tr class="row-even"><td><p>B</p></td> <td><p>Bytes</p></td> </tr> <tr class="row-odd"><td><p>KB</p></td> <td><p>Kilobytes</p></td> </tr> <tr class="row-even"><td><p>MB</p></td> <td><p>Megabytes</p></td> </tr> <tr class="row-odd"><td><p>GB</p></td> <td><p>Gigabytes</p></td> </tr> <tr class="row-even"><td><p>TB</p></td> <td><p>Terabytes</p></td> </tr> </tbody> </table> <p>See <a class="reference internal" href="stdlib.html#stdlib-types-memoryunit"><span class="std std-ref">MemoryUnit</span></a> for more information.</p> <div class="admonition note"> <p class="admonition-title">Note</p> <p>This directive is only used by certain executors. Refer to the <a class="reference internal" href="../executor.html#executor-page"><span class="std std-ref">Executors</span></a> page to see which executors support this directive.</p> </div> <p>See also: <a class="reference internal" href="#cpus"><span class="std std-doc">cpus</span></a>, <a class="reference internal" href="#memory"><span class="std std-doc">memory</span></a> <a class="reference internal" href="#time"><span class="std std-doc">time</span></a>, <a class="reference internal" href="#queue"><span class="std std-doc">queue</span></a> and <a class="reference internal" href="../process.html#dynamic-task-resources"><span class="std std-ref">Dynamic task resources</span></a>.</p> </section> <section id="echo"> <span id="process-echo"></span><h3>echo<a class="headerlink" href="#echo" title="Permalink to this heading"></a></h3> <div class="deprecated"> <p><span class="versionmodified deprecated">Deprecated since version 22.04.0: </span>Use <code class="docutils literal notranslate"><span class="pre">debug</span></code> instead</p> </div> </section> <section id="errorstrategy"> <span id="process-error-strategy"></span><h3>errorStrategy<a class="headerlink" href="#errorstrategy" title="Permalink to this heading"></a></h3> <p>The <code class="docutils literal notranslate"><span class="pre">errorStrategy</span></code> directive allows you to define how the process manages an error condition. By default, when an error status is returned by the executed script (i.e. when it ends with a non-zero exit status), the process stops immediately, forcing the entire pipeline to terminate.</p> <p>The following error strategies are available:</p> <dl class="simple myst"> <dt><code class="docutils literal notranslate"><span class="pre">terminate</span></code> (default)</dt><dd><p>When a task fails, terminate the pipeline immediately and report an error. Pending and running jobs are killed.</p> </dd> <dt><code class="docutils literal notranslate"><span class="pre">finish</span></code></dt><dd><p>When a task fails, wait for submitted and running tasks to finish and then terminate the pipeline, reporting an error.</p> </dd> <dt><code class="docutils literal notranslate"><span class="pre">ignore</span></code></dt><dd><p>When a task fails, ignore it and continue the pipeline execution. If the <code class="docutils literal notranslate"><span class="pre">workflow.failOnIgnore</span></code> config option is set to <code class="docutils literal notranslate"><span class="pre">true</span></code>, the pipeline will report an error (i.e. return a non-zero exit code) upon completion. Otherwise, the pipeline will complete successfully.</p> </dd> <dd><p>See <a class="reference internal" href="stdlib.html#stdlib-constants"><span class="std std-ref">Constants</span></a> for more information on <code class="docutils literal notranslate"><span class="pre">workflow.failOnIgnore</span></code>.</p> </dd> <dt><code class="docutils literal notranslate"><span class="pre">retry</span></code></dt><dd><p>When a task fails, retry it.</p> </dd> </dl> <p>When setting the <code class="docutils literal notranslate"><span class="pre">errorStrategy</span></code> directive to <code class="docutils literal notranslate"><span class="pre">ignore</span></code> the process doesn’t stop on an error condition, it just reports a message notifying you of the error event.</p> <p>For example:</p> <div class="highlight-nextflow notranslate"><div class="highlight"><pre><span></span><span class="kd">process</span><span class="w"> </span><span class="n">ignoreAnyError</span><span class="w"> </span><span class="o">{</span> <span class="w"> </span><span class="n">errorStrategy</span><span class="w"> </span><span class="s1">'ignore'</span> <span class="w"> </span><span class="c1">// ...</span> <span class="o">}</span> </pre></div> </div> <p>In this case, the workflow will complete successfully and return an exit status of 0. However, if you set <code class="docutils literal notranslate"><span class="pre">workflow.failOnIgnore</span> <span class="pre">=</span> <span class="pre">true</span></code> in your Nextflow configuration, the workflow will return a non-zero exit status and report the failed tasks as an error.</p> <p>The <code class="docutils literal notranslate"><span class="pre">retry</span></code> error strategy allows you to re-submit for execution a process returning an error condition. For example:</p> <div class="highlight-nextflow notranslate"><div class="highlight"><pre><span></span><span class="kd">process</span><span class="w"> </span><span class="n">retryIfFail</span><span class="w"> </span><span class="o">{</span> <span class="w"> </span><span class="n">errorStrategy</span><span class="w"> </span><span class="s1">'retry'</span> <span class="w"> </span><span class="c1">// ...</span> <span class="o">}</span> </pre></div> </div> <p>The number of times a failing process is re-executed is defined by the <a class="reference internal" href="#maxretries"><span class="std std-doc">maxRetries</span></a> and <a class="reference internal" href="#maxerrors"><span class="std std-doc">maxErrors</span></a> directives.</p> <div class="admonition tip"> <p class="admonition-title">Tip</p> <p>More complex strategies depending on the task exit status or other parametric values can be defined using a dynamic <code class="docutils literal notranslate"><span class="pre">errorStrategy</span></code>. See <a class="reference internal" href="../process.html#dynamic-directives"><span class="std std-ref">Dynamic directives</span></a> for details.</p> </div> <p>See also: <a class="reference internal" href="#maxerrors"><span class="std std-doc">maxErrors</span></a>, <a class="reference internal" href="#maxretries"><span class="std std-doc">maxRetries</span></a> and <a class="reference internal" href="../process.html#dynamic-task-resources"><span class="std std-ref">Dynamic task resources</span></a>.</p> </section> <section id="executor"> <span id="process-executor"></span><h3>executor<a class="headerlink" href="#executor" title="Permalink to this heading"></a></h3> <p>The <code class="docutils literal notranslate"><span class="pre">executor</span></code> defines the underlying system where processes are executed. By default a process uses the executor defined globally in the <code class="docutils literal notranslate"><span class="pre">nextflow.config</span></code> file.</p> <p>The <code class="docutils literal notranslate"><span class="pre">executor</span></code> directive allows you to configure what executor has to be used by the process, overriding the default configuration.</p> <p>The following executors are available:</p> <table class="docutils align-default"> <thead> <tr class="row-odd"><th class="head"><p>Name</p></th> <th class="head"><p>Executor</p></th> </tr> </thead> <tbody> <tr class="row-even"><td><p><code class="docutils literal notranslate"><span class="pre">awsbatch</span></code></p></td> <td><p><a class="reference external" href="https://aws.amazon.com/batch/">AWS Batch</a> service</p></td> </tr> <tr class="row-odd"><td><p><code class="docutils literal notranslate"><span class="pre">azurebatch</span></code></p></td> <td><p><a class="reference external" href="https://azure.microsoft.com/en-us/services/batch/">Azure Batch</a> service</p></td> </tr> <tr class="row-even"><td><p><code class="docutils literal notranslate"><span class="pre">condor</span></code></p></td> <td><p><a class="reference external" href="https://research.cs.wisc.edu/htcondor/">HTCondor</a> job scheduler</p></td> </tr> <tr class="row-odd"><td><p><code class="docutils literal notranslate"><span class="pre">google-lifesciences</span></code></p></td> <td><p><a class="reference external" href="https://cloud.google.com/life-sciences">Google Genomics Pipelines</a> service</p></td> </tr> <tr class="row-even"><td><p><code class="docutils literal notranslate"><span class="pre">k8s</span></code></p></td> <td><p><a class="reference external" href="https://kubernetes.io/">Kubernetes</a> cluster</p></td> </tr> <tr class="row-odd"><td><p><code class="docutils literal notranslate"><span class="pre">local</span></code></p></td> <td><p>The computer where <code class="docutils literal notranslate"><span class="pre">Nextflow</span></code> is launched</p></td> </tr> <tr class="row-even"><td><p><code class="docutils literal notranslate"><span class="pre">lsf</span></code></p></td> <td><p><a class="reference external" href="http://en.wikipedia.org/wiki/Platform_LSF">Platform LSF</a> job scheduler</p></td> </tr> <tr class="row-odd"><td><p><code class="docutils literal notranslate"><span class="pre">moab</span></code></p></td> <td><p><a class="reference external" href="http://www.adaptivecomputing.com/moab-hpc-basic-edition/">Moab</a> job scheduler</p></td> </tr> <tr class="row-even"><td><p><code class="docutils literal notranslate"><span class="pre">nqsii</span></code></p></td> <td><p><a class="reference external" href="https://www.rz.uni-kiel.de/en/our-portfolio/hiperf/nec-linux-cluster">NQSII</a> job scheduler</p></td> </tr> <tr class="row-odd"><td><p><code class="docutils literal notranslate"><span class="pre">oge</span></code></p></td> <td><p>Alias for the <code class="docutils literal notranslate"><span class="pre">sge</span></code> executor</p></td> </tr> <tr class="row-even"><td><p><code class="docutils literal notranslate"><span class="pre">pbs</span></code></p></td> <td><p><a class="reference external" href="http://en.wikipedia.org/wiki/Portable_Batch_System">PBS/Torque</a> job scheduler</p></td> </tr> <tr class="row-odd"><td><p><code class="docutils literal notranslate"><span class="pre">pbspro</span></code></p></td> <td><p><a class="reference external" href="https://www.pbsworks.com/">PBS Pro</a> job scheduler</p></td> </tr> <tr class="row-even"><td><p><code class="docutils literal notranslate"><span class="pre">sge</span></code></p></td> <td><p>Sun Grid Engine / <a class="reference external" href="http://gridscheduler.sourceforge.net/">Open Grid Engine</a></p></td> </tr> <tr class="row-odd"><td><p><code class="docutils literal notranslate"><span class="pre">slurm</span></code></p></td> <td><p><a class="reference external" href="https://en.wikipedia.org/wiki/Slurm_Workload_Manager">SLURM</a> workload manager</p></td> </tr> <tr class="row-even"><td><p><code class="docutils literal notranslate"><span class="pre">uge</span></code></p></td> <td><p>Alias for the <code class="docutils literal notranslate"><span class="pre">sge</span></code> executor</p></td> </tr> </tbody> </table> <p>The following example shows how to set the process’s executor:</p> <div class="highlight-nextflow notranslate"><div class="highlight"><pre><span></span><span class="kd">process</span><span class="w"> </span><span class="n">doSomething</span><span class="w"> </span><span class="o">{</span> <span class="w"> </span><span class="n">executor</span><span class="w"> </span><span class="s1">'sge'</span> <span class="w"> </span><span class="c1">// ...</span> <span class="o">}</span> </pre></div> </div> <div class="admonition note"> <p class="admonition-title">Note</p> <p>Each executor supports additional directives and <code class="docutils literal notranslate"><span class="pre">executor</span></code> configuration options. See <a class="reference internal" href="../executor.html#executor-page"><span class="std std-ref">Executors</span></a> for more information.</p> </div> </section> <section id="ext"> <span id="process-ext"></span><h3>ext<a class="headerlink" href="#ext" title="Permalink to this heading"></a></h3> <p>The <code class="docutils literal notranslate"><span class="pre">ext</span></code> is a special directive used as <em>namespace</em> for user custom process directives. This can be useful for advanced configuration options. For example:</p> <div class="highlight-nextflow notranslate"><div class="highlight"><pre><span></span><span class="kd">process</span><span class="w"> </span><span class="n">mapping</span><span class="w"> </span><span class="o">{</span> <span class="w"> </span><span class="n">container</span><span class="w"> </span><span class="s2">"biocontainers/star:${task.ext.version}"</span> <span class="w"> </span><span class="nl">input:</span> <span class="w"> </span><span class="n">path</span><span class="w"> </span><span class="n">genome</span> <span class="w"> </span><span class="n">tuple</span><span class="w"> </span><span class="n">val</span><span class="o">(</span><span class="n">sampleId</span><span class="o">),</span><span class="w"> </span><span class="n">path</span><span class="o">(</span><span class="n">reads</span><span class="o">)</span> <span class="w"> </span><span class="nl">script:</span> <span class="w"> </span><span class="s2">"""</span> <span class="s2"> STAR --genomeDir $genome --readFilesIn $reads ${task.ext.args ?: ''}</span> <span class="s2"> """</span> <span class="o">}</span> </pre></div> </div> <p>In the above example, the process container version is controlled by <code class="docutils literal notranslate"><span class="pre">ext.version</span></code>, and the script supports additional command line arguments through <code class="docutils literal notranslate"><span class="pre">ext.args</span></code>.</p> <p>The <code class="docutils literal notranslate"><span class="pre">ext</span></code> directive can be set in the process definition:</p> <div class="highlight-nextflow notranslate"><div class="highlight"><pre><span></span><span class="kd">process</span><span class="w"> </span><span class="n">mapping</span><span class="w"> </span><span class="o">{</span> <span class="w"> </span><span class="n">ext</span><span class="w"> </span><span class="nl">version:</span><span class="w"> </span><span class="s1">'2.5.3'</span><span class="o">,</span><span class="w"> </span><span class="nl">args:</span><span class="w"> </span><span class="s1">'--foo --bar'</span> <span class="w"> </span><span class="c1">// ...</span> <span class="o">}</span> </pre></div> </div> <p>Or in the Nextflow configuration:</p> <div class="highlight-groovy notranslate"><div class="highlight"><pre><span></span><span class="n">process</span><span class="o">.</span><span class="na">ext</span><span class="o">.</span><span class="na">version</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s1">'2.5.3'</span> <span class="n">process</span><span class="o">.</span><span class="na">ext</span><span class="o">.</span><span class="na">args</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s1">'--foo --bar'</span> </pre></div> </div> </section> <section id="fair"> <span id="process-fair"></span><h3>fair<a class="headerlink" href="#fair" title="Permalink to this heading"></a></h3> <div class="versionadded"> <p><span class="versionmodified added">New in version 22.12.0-edge.</span></p> </div> <p>The <code class="docutils literal notranslate"><span class="pre">fair</span></code> directive, when enabled, guarantees that process outputs will be emitted in the order in which they were received. For example:</p> <div class="highlight-nextflow notranslate"><div class="highlight"><pre><span></span><span class="kd">process</span><span class="w"> </span><span class="n">foo</span><span class="w"> </span><span class="o">{</span> <span class="w"> </span><span class="n">fair</span><span class="w"> </span><span class="kc">true</span> <span class="w"> </span><span class="nl">input:</span> <span class="w"> </span><span class="n">val</span><span class="w"> </span><span class="n">x</span> <span class="w"> </span><span class="kd">output</span><span class="o">:</span> <span class="w"> </span><span class="n">tuple</span><span class="w"> </span><span class="n">val</span><span class="o">(</span><span class="n">task</span><span class="o">.</span><span class="na">index</span><span class="o">),</span><span class="w"> </span><span class="n">val</span><span class="o">(</span><span class="n">x</span><span class="o">)</span> <span class="w"> </span><span class="nl">script:</span> <span class="w"> </span><span class="s2">"""</span> <span class="s2"> sleep \$((RANDOM % 3))</span> <span class="s2"> """</span> <span class="o">}</span> <span class="kd">workflow</span><span class="w"> </span><span class="o">{</span> <span class="w"> </span><span class="n">channel</span><span class="o">.</span><span class="na">of</span><span class="o">(</span><span class="s1">'A'</span><span class="o">,</span><span class="s1">'B'</span><span class="o">,</span><span class="s1">'C'</span><span class="o">,</span><span class="s1">'D'</span><span class="o">)</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="n">foo</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="n">view</span> <span class="o">}</span> </pre></div> </div> <p>The above example produces:</p> <div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="p">[</span><span class="mi">1</span><span class="p">,</span> <span class="n">A</span><span class="p">]</span> <span class="p">[</span><span class="mi">2</span><span class="p">,</span> <span class="n">B</span><span class="p">]</span> <span class="p">[</span><span class="mi">3</span><span class="p">,</span> <span class="n">C</span><span class="p">]</span> <span class="p">[</span><span class="mi">4</span><span class="p">,</span> <span class="n">D</span><span class="p">]</span> </pre></div> </div> </section> <section id="label"> <span id="process-label"></span><h3>label<a class="headerlink" href="#label" title="Permalink to this heading"></a></h3> <p>The <code class="docutils literal notranslate"><span class="pre">label</span></code> directive allows the annotation of processes with mnemonic identifier of your choice. For example:</p> <div class="highlight-nextflow notranslate"><div class="highlight"><pre><span></span><span class="kd">process</span><span class="w"> </span><span class="n">bigTask</span><span class="w"> </span><span class="o">{</span> <span class="w"> </span><span class="n">label</span><span class="w"> </span><span class="s1">'big_mem'</span> <span class="w"> </span><span class="nl">script:</span> <span class="w"> </span><span class="s2">"""</span> <span class="s2"> your_command --here</span> <span class="s2"> """</span> <span class="o">}</span> </pre></div> </div> <p>The same label can be applied to more than a process and multiple labels can be applied to the same process using the <code class="docutils literal notranslate"><span class="pre">label</span></code> directive more than one time.</p> <div class="admonition note"> <p class="admonition-title">Note</p> <p>A label must consist of alphanumeric characters or <code class="docutils literal notranslate"><span class="pre">_</span></code>, must start with an alphabetic character and must end with an alphanumeric character.</p> </div> <p>Labels are useful to organize workflow processes in separate groups which can be referenced in the configuration file to select and configure a subset of processes having similar computing requirements. See <a class="reference internal" href="../config.html#config-process-selectors"><span class="std std-ref">Process selectors</span></a> for more information.</p> <p>See also: <a class="reference internal" href="#resourcelabels"><span class="std std-doc">resourceLabels</span></a></p> </section> <section id="machinetype"> <span id="process-machinetype"></span><h3>machineType<a class="headerlink" href="#machinetype" title="Permalink to this heading"></a></h3> <div class="versionadded"> <p><span class="versionmodified added">New in version 19.07.0.</span></p> </div> <p>The <code class="docutils literal notranslate"><span class="pre">machineType</span></code> can be used to specify a predefined Google Compute Platform <a class="reference external" href="https://cloud.google.com/compute/docs/machine-types">machine type</a> when running using the <a class="reference internal" href="../executor.html#google-batch-executor"><span class="std std-ref">Google Batch</span></a> or <a class="reference internal" href="../executor.html#google-lifesciences-executor"><span class="std std-ref">Google Life Sciences</span></a> executor, or when using the autopools feature of the <a class="reference internal" href="../executor.html#azurebatch-executor"><span class="std std-ref">Azure Batch executor</span></a>.</p> <p>This directive is optional and if specified overrides the cpus and memory directives:</p> <div class="highlight-nextflow notranslate"><div class="highlight"><pre><span></span><span class="kd">process</span><span class="w"> </span><span class="n">foo</span><span class="w"> </span><span class="o">{</span> <span class="w"> </span><span class="n">machineType</span><span class="w"> </span><span class="s1">'n1-highmem-8'</span> <span class="w"> </span><span class="nl">script:</span> <span class="w"> </span><span class="s2">"""</span> <span class="s2"> your_command --here</span> <span class="s2"> """</span> <span class="o">}</span> </pre></div> </div> <p>See also: <a class="reference internal" href="#cpus"><span class="std std-doc">cpus</span></a> and <a class="reference internal" href="#memory"><span class="std std-doc">memory</span></a>.</p> </section> <section id="maxsubmitawait"> <span id="process-maxsubmitawait"></span><h3>maxSubmitAwait<a class="headerlink" href="#maxsubmitawait" title="Permalink to this heading"></a></h3> <p>The <code class="docutils literal notranslate"><span class="pre">maxSubmitAwait</span></code> directive allows you to specify how long a task can remain in submission queue without being executed. Elapsed this time the task execution will fail.</p> <p>When used along with <code class="docutils literal notranslate"><span class="pre">retry</span></code> error strategy, it can be useful to re-schedule the task to a difference queue or resource requirement. For example:</p> <div class="highlight-nextflow notranslate"><div class="highlight"><pre><span></span><span class="kd">process</span><span class="w"> </span><span class="n">foo</span><span class="w"> </span><span class="o">{</span> <span class="w"> </span><span class="n">errorStrategy</span><span class="w"> </span><span class="s1">'retry'</span> <span class="w"> </span><span class="n">maxSubmitAwait</span><span class="w"> </span><span class="s1">'10 mins'</span> <span class="w"> </span><span class="n">maxRetries</span><span class="w"> </span><span class="mi">3</span> <span class="w"> </span><span class="n">queue</span><span class="w"> </span><span class="s2">"${task.submitAttempt==1 : 'spot-compute' : 'on-demand-compute'}"</span> <span class="w"> </span><span class="nl">script:</span> <span class="w"> </span><span class="s2">"""</span> <span class="s2"> your_command --here</span> <span class="s2"> """</span> <span class="o">}</span> </pre></div> </div> <p>In the above example the task is submitted to the <code class="docutils literal notranslate"><span class="pre">spot-compute</span></code> on the first attempt (<code class="docutils literal notranslate"><span class="pre">task.submitAttempt==1</span></code>). If the task execution does not start in the 10 minutes, a failure is reported and a new submission is attempted using the queue named <code class="docutils literal notranslate"><span class="pre">on-demand-compute</span></code>.</p> </section> <section id="maxerrors"> <span id="process-maxerrors"></span><h3>maxErrors<a class="headerlink" href="#maxerrors" title="Permalink to this heading"></a></h3> <p>The <code class="docutils literal notranslate"><span class="pre">maxErrors</span></code> directive allows you to specify the maximum number of times a process can fail when using the <code class="docutils literal notranslate"><span class="pre">retry</span></code> error strategy. By default this directive is disabled, you can set it as shown in the example below:</p> <div class="highlight-nextflow notranslate"><div class="highlight"><pre><span></span><span class="kd">process</span><span class="w"> </span><span class="n">retryIfFail</span><span class="w"> </span><span class="o">{</span> <span class="w"> </span><span class="n">errorStrategy</span><span class="w"> </span><span class="s1">'retry'</span> <span class="w"> </span><span class="n">maxErrors</span><span class="w"> </span><span class="mi">5</span> <span class="w"> </span><span class="nl">script:</span> <span class="w"> </span><span class="s2">"""</span> <span class="s2"> echo 'do this as that .. '</span> <span class="s2"> """</span> <span class="o">}</span> </pre></div> </div> <div class="admonition note"> <p class="admonition-title">Note</p> <p>This setting considers the <strong>total</strong> errors accumulated for a given process, across all instances. If you want to control the number of times a process <strong>instance</strong> (aka task) can fail, use <code class="docutils literal notranslate"><span class="pre">maxRetries</span></code>.</p> </div> <p>See also: <a class="reference internal" href="#errorstrategy"><span class="std std-doc">errorStrategy</span></a> and <a class="reference internal" href="#maxretries"><span class="std std-doc">maxRetries</span></a>.</p> </section> <section id="maxforks"> <span id="process-maxforks"></span><h3>maxForks<a class="headerlink" href="#maxforks" title="Permalink to this heading"></a></h3> <p>The <code class="docutils literal notranslate"><span class="pre">maxForks</span></code> directive allows you to define the maximum number of process instances that can be executed in parallel. By default this value is equals to the number of CPU cores available minus 1.</p> <p>If you want to execute a process in a sequential manner, set this directive to one. For example:</p> <div class="highlight-nextflow notranslate"><div class="highlight"><pre><span></span><span class="kd">process</span><span class="w"> </span><span class="n">doNotParallelizeIt</span><span class="w"> </span><span class="o">{</span> <span class="w"> </span><span class="n">maxForks</span><span class="w"> </span><span class="mi">1</span> <span class="w"> </span><span class="nl">script:</span> <span class="w"> </span><span class="s2">"""</span> <span class="s2"> your_command --here</span> <span class="s2"> """</span> <span class="o">}</span> </pre></div> </div> </section> <section id="maxretries"> <span id="process-maxretries"></span><h3>maxRetries<a class="headerlink" href="#maxretries" title="Permalink to this heading"></a></h3> <p>The <code class="docutils literal notranslate"><span class="pre">maxRetries</span></code> directive allows you to define the maximum number of times a process instance can be re-submitted in case of failure. This value is applied only when using the <code class="docutils literal notranslate"><span class="pre">retry</span></code> error strategy. By default only one retry is allowed, you can increase this value as shown below:</p> <div class="highlight-nextflow notranslate"><div class="highlight"><pre><span></span><span class="kd">process</span><span class="w"> </span><span class="n">retryIfFail</span><span class="w"> </span><span class="o">{</span> <span class="w"> </span><span class="n">errorStrategy</span><span class="w"> </span><span class="s1">'retry'</span> <span class="w"> </span><span class="n">maxRetries</span><span class="w"> </span><span class="mi">3</span> <span class="w"> </span><span class="nl">script:</span> <span class="w"> </span><span class="s2">"""</span> <span class="s2"> echo 'do this as that .. '</span> <span class="s2"> """</span> <span class="o">}</span> </pre></div> </div> <div class="admonition note"> <p class="admonition-title">Note</p> <p>There is a subtle but important difference between <code class="docutils literal notranslate"><span class="pre">maxRetries</span></code> and the <code class="docutils literal notranslate"><span class="pre">maxErrors</span></code> directive. The latter defines the total number of errors that are allowed during the process execution (the same process can launch different execution instances), while the <code class="docutils literal notranslate"><span class="pre">maxRetries</span></code> defines the maximum number of times the same process execution can be retried in case of an error.</p> </div> <p>See also: <a class="reference internal" href="#errorstrategy"><span class="std std-doc">errorStrategy</span></a> and <a class="reference internal" href="#maxerrors"><span class="std std-doc">maxErrors</span></a>.</p> </section> <section id="memory"> <span id="process-memory"></span><h3>memory<a class="headerlink" href="#memory" title="Permalink to this heading"></a></h3> <p>The <code class="docutils literal notranslate"><span class="pre">memory</span></code> directive allows you to define how much memory the process is allowed to use. For example:</p> <div class="highlight-nextflow notranslate"><div class="highlight"><pre><span></span><span class="kd">process</span><span class="w"> </span><span class="n">big_job</span><span class="w"> </span><span class="o">{</span> <span class="w"> </span><span class="n">memory</span><span class="w"> </span><span class="s1">'2 GB'</span> <span class="w"> </span><span class="n">executor</span><span class="w"> </span><span class="s1">'sge'</span> <span class="w"> </span><span class="nl">script:</span> <span class="w"> </span><span class="s2">"""</span> <span class="s2"> your_command --here</span> <span class="s2"> """</span> <span class="o">}</span> </pre></div> </div> <p>The following memory unit suffix can be used when specifying the memory value:</p> <table class="docutils align-default"> <thead> <tr class="row-odd"><th class="head"><p>Unit</p></th> <th class="head"><p>Description</p></th> </tr> </thead> <tbody> <tr class="row-even"><td><p>B</p></td> <td><p>Bytes</p></td> </tr> <tr class="row-odd"><td><p>KB</p></td> <td><p>Kilobytes</p></td> </tr> <tr class="row-even"><td><p>MB</p></td> <td><p>Megabytes</p></td> </tr> <tr class="row-odd"><td><p>GB</p></td> <td><p>Gigabytes</p></td> </tr> <tr class="row-even"><td><p>TB</p></td> <td><p>Terabytes</p></td> </tr> </tbody> </table> <p>See <a class="reference internal" href="stdlib.html#stdlib-types-memoryunit"><span class="std std-ref">MemoryUnit</span></a> for more information.</p> <p>See also: <a class="reference internal" href="#cpus"><span class="std std-doc">cpus</span></a>, <a class="reference internal" href="#time"><span class="std std-doc">time</span></a>, <a class="reference internal" href="#queue"><span class="std std-doc">queue</span></a> and <a class="reference internal" href="../process.html#dynamic-task-resources"><span class="std std-ref">Dynamic task resources</span></a>.</p> </section> <section id="module"> <span id="process-module"></span><h3>module<a class="headerlink" href="#module" title="Permalink to this heading"></a></h3> <p><a class="reference external" href="http://modules.sourceforge.net/">Environment Modules</a> is a package manager that allows you to dynamically configure your execution environment and easily switch between multiple versions of the same software tool.</p> <p>If it is available in your system you can use it with Nextflow in order to configure the processes execution environment in your pipeline.</p> <p>In a process definition you can use the <code class="docutils literal notranslate"><span class="pre">module</span></code> directive to load a specific module version to be used in the process execution environment. For example:</p> <div class="highlight-nextflow notranslate"><div class="highlight"><pre><span></span><span class="kd">process</span><span class="w"> </span><span class="n">basicExample</span><span class="w"> </span><span class="o">{</span> <span class="w"> </span><span class="n">module</span><span class="w"> </span><span class="s1">'ncbi-blast/2.2.27'</span> <span class="w"> </span><span class="nl">script:</span> <span class="w"> </span><span class="s2">"""</span> <span class="s2"> blastp -query <etc..></span> <span class="s2"> """</span> <span class="o">}</span> </pre></div> </div> <p>You can repeat the <code class="docutils literal notranslate"><span class="pre">module</span></code> directive for each module you need to load. Alternatively multiple modules can be specified in a single <code class="docutils literal notranslate"><span class="pre">module</span></code> directive by separating all the module names by using a <code class="docutils literal notranslate"><span class="pre">:</span></code> (colon) character as shown below:</p> <div class="highlight-nextflow notranslate"><div class="highlight"><pre><span></span><span class="kd">process</span><span class="w"> </span><span class="n">manyModules</span><span class="w"> </span><span class="o">{</span> <span class="w"> </span><span class="n">module</span><span class="w"> </span><span class="s1">'ncbi-blast/2.2.27:t_coffee/10.0:clustalw/2.1'</span> <span class="w"> </span><span class="nl">script:</span> <span class="w"> </span><span class="s2">"""</span> <span class="s2"> blastp -query <etc..></span> <span class="s2"> """</span> <span class="o">}</span> </pre></div> </div> </section> <section id="penv"> <span id="process-penv"></span><h3>penv<a class="headerlink" href="#penv" title="Permalink to this heading"></a></h3> <p>The <code class="docutils literal notranslate"><span class="pre">penv</span></code> directive allows you to define the parallel environment to be used when submitting a parallel task to the <a class="reference internal" href="../executor.html#sge-executor"><span class="std std-ref">SGE</span></a> resource manager. For example:</p> <div class="highlight-nextflow notranslate"><div class="highlight"><pre><span></span><span class="kd">process</span><span class="w"> </span><span class="n">big_job</span><span class="w"> </span><span class="o">{</span> <span class="w"> </span><span class="n">cpus</span><span class="w"> </span><span class="mi">4</span> <span class="w"> </span><span class="n">penv</span><span class="w"> </span><span class="s1">'smp'</span> <span class="w"> </span><span class="n">executor</span><span class="w"> </span><span class="s1">'sge'</span> <span class="w"> </span><span class="nl">script:</span> <span class="w"> </span><span class="s2">"""</span> <span class="s2"> blastp -query input_sequence -num_threads ${task.cpus}</span> <span class="s2"> """</span> <span class="o">}</span> </pre></div> </div> <p>This configuration depends on the parallel environment provided by your grid engine installation. Refer to your cluster documentation or contact your admin to learn more about this.</p> <p>See also: <a class="reference internal" href="#cpus"><span class="std std-doc">cpus</span></a>, <a class="reference internal" href="#memory"><span class="std std-doc">memory</span></a>, <a class="reference internal" href="#time"><span class="std std-doc">time</span></a></p> </section> <section id="pod"> <span id="process-pod"></span><h3>pod<a class="headerlink" href="#pod" title="Permalink to this heading"></a></h3> <p>The <code class="docutils literal notranslate"><span class="pre">pod</span></code> directive allows the definition of pod specific settings, such as environment variables, secrets, and config maps, when using the <a class="reference internal" href="../executor.html#k8s-executor"><span class="std std-ref">Kubernetes</span></a> executor.</p> <p>For example:</p> <div class="highlight-nextflow notranslate"><div class="highlight"><pre><span></span><span class="kd">process</span><span class="w"> </span><span class="n">your_task</span><span class="w"> </span><span class="o">{</span> <span class="w"> </span><span class="n">pod</span><span class="w"> </span><span class="nl">env:</span><span class="w"> </span><span class="s1">'FOO'</span><span class="o">,</span><span class="w"> </span><span class="nl">value:</span><span class="w"> </span><span class="s1">'bar'</span> <span class="w"> </span><span class="nl">script:</span> <span class="w"> </span><span class="s2">"""</span> <span class="s2"> echo $FOO</span> <span class="s2"> """</span> <span class="o">}</span> </pre></div> </div> <p>The above snippet defines an environment variable named <code class="docutils literal notranslate"><span class="pre">FOO</span></code> whose value is <code class="docutils literal notranslate"><span class="pre">bar</span></code>.</p> <p>When defined in the Nextflow configuration file, a pod setting can be defined as a map:</p> <div class="highlight-groovy notranslate"><div class="highlight"><pre><span></span><span class="n">process</span><span class="w"> </span><span class="o">{</span> <span class="w"> </span><span class="n">pod</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="o">[</span><span class="nl">env:</span><span class="w"> </span><span class="s1">'FOO'</span><span class="o">,</span><span class="w"> </span><span class="nl">value:</span><span class="w"> </span><span class="s1">'bar'</span><span class="o">]</span> <span class="o">}</span> </pre></div> </div> <p>Or as a list of maps:</p> <div class="highlight-groovy notranslate"><div class="highlight"><pre><span></span><span class="n">process</span><span class="w"> </span><span class="o">{</span> <span class="w"> </span><span class="n">pod</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="o">[</span> <span class="w"> </span><span class="o">[</span><span class="nl">env:</span><span class="w"> </span><span class="s1">'FOO'</span><span class="o">,</span><span class="w"> </span><span class="nl">value:</span><span class="w"> </span><span class="s1">'bar'</span><span class="o">],</span> <span class="w"> </span><span class="o">[</span><span class="nl">secret:</span><span class="w"> </span><span class="s1">'my-secret/key1'</span><span class="o">,</span><span class="w"> </span><span class="nl">mountPath:</span><span class="w"> </span><span class="s1">'/etc/file.txt'</span><span class="o">]</span> <span class="w"> </span><span class="o">]</span> <span class="o">}</span> </pre></div> </div> <p>The following options are available:</p> <dl class="simple myst"> <dt><code class="docutils literal notranslate"><span class="pre">affinity:</span> <span class="pre"><config></span></code></dt><dd><div class="versionadded"> <p><span class="versionmodified added">New in version 22.01.0-edge.</span></p> </div> </dd> <dd><p>Specifies the pod <a class="reference external" href="https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/#affinity-and-anti-affinity">affinity</a> with the given configuration.</p> </dd> <dt><code class="docutils literal notranslate"><span class="pre">annotation:</span> <span class="pre">'<name>',</span> <span class="pre">value:</span> <span class="pre">'<value>'</span></code></dt><dd><p><em>Can be specified multiple times</em></p> </dd> <dd><p>Defines a pod <a class="reference external" href="https://kubernetes.io/docs/concepts/overview/working-with-objects/annotations/">annotation</a> with the given name and value.</p> </dd> <dt><code class="docutils literal notranslate"><span class="pre">automountServiceAccountToken:</span> <span class="pre">true</span> <span class="pre">|</span> <span class="pre">false</span></code></dt><dd><div class="versionadded"> <p><span class="versionmodified added">New in version 22.01.0-edge.</span></p> </div> </dd> <dd><p>Specifies whether to <a class="reference external" href="https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/#opt-out-of-api-credential-automounting">automount service account token</a> into the pod (default: <code class="docutils literal notranslate"><span class="pre">true</span></code>).</p> </dd> <dt><code class="docutils literal notranslate"><span class="pre">config:</span> <span class="pre">'<configMap>/<key>',</span> <span class="pre">mountPath:</span> <span class="pre">'</absolute/path>'</span></code></dt><dd><p><em>Can be specified multiple times</em></p> </dd> <dd><p>Mounts a <a class="reference external" href="https://kubernetes.io/docs/tasks/configure-pod-container/configure-pod-configmap/">ConfigMap</a> with name and optional key to the given path. If the key is omitted, the path is interpreted as a directory and all entries in the <code class="docutils literal notranslate"><span class="pre">ConfigMap</span></code> are exposed in that path.</p> </dd> <dt><code class="docutils literal notranslate"><span class="pre">csi:</span> <span class="pre">'<config>',</span> <span class="pre">mountPath:</span> <span class="pre">'</absolute/path>'</span></code></dt><dd><div class="versionadded"> <p><span class="versionmodified added">New in version 22.11.0-edge.</span></p> </div> </dd> <dd><p><em>Can be specified multiple times</em></p> </dd> <dd><p>Mounts a <a class="reference external" href="https://kubernetes.io/docs/concepts/storage/ephemeral-volumes/#csi-ephemeral-volumes">CSI ephemeral volume</a> with the given configuration to the given path.</p> </dd> <dt><code class="docutils literal notranslate"><span class="pre">emptyDir:</span> <span class="pre"><config>,</span> <span class="pre">mountPath:</span> <span class="pre">'</absolute/path>'</span></code></dt><dd><div class="versionadded"> <p><span class="versionmodified added">New in version 22.11.0-edge.</span></p> </div> </dd> <dd><p><em>Can be specified multiple times</em></p> </dd> <dd><p>Mounts an <a class="reference external" href="https://kubernetes.io/docs/concepts/storage/volumes/#emptydir">emptyDir</a> with the given configuration to the given path.</p> </dd> <dt><code class="docutils literal notranslate"><span class="pre">env:</span> <span class="pre">'<name>',</span> <span class="pre">config:</span> <span class="pre">'<configMap>/<key>'</span></code></dt><dd><p><em>Can be specified multiple times</em></p> </dd> <dd><p>Defines an environment variable whose value is defined by the given <a class="reference external" href="https://kubernetes.io/docs/tasks/configure-pod-container/configure-pod-configmap/">ConfigMap</a> and key.</p> </dd> <dt><code class="docutils literal notranslate"><span class="pre">env:</span> <span class="pre">'<name>',</span> <span class="pre">fieldPath:</span> <span class="pre">'<fieldPath>'</span></code></dt><dd><div class="versionadded"> <p><span class="versionmodified added">New in version 21.09.1-edge.</span></p> </div> </dd> <dd><p><em>Can be specified multiple times</em></p> </dd> <dd><p>Defines an environment variable whose value is defined by the given <a class="reference external" href="https://kubernetes.io/docs/tasks/inject-data-application/environment-variable-expose-pod-information/#use-pod-fields-as-values-for-environment-variables">field path</a> value.</p> </dd> <dd><p>For example, the following pod option:</p> <div class="highlight-groovy notranslate"><div class="highlight"><pre><span></span><span class="n">pod</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="o">[</span><span class="nl">env:</span><span class="w"> </span><span class="s1">'MY_NODE_NAME'</span><span class="o">,</span><span class="w"> </span><span class="nl">fieldPath:</span><span class="w"> </span><span class="s1">'spec.nodeName'</span><span class="o">]</span> </pre></div> </div> <p>Maps to the following pod spec:</p> <div class="highlight-yaml notranslate"><div class="highlight"><pre><span></span><span class="nt">env</span><span class="p">:</span> <span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">MY_NODE_NAME</span> <span class="w"> </span><span class="nt">valueFrom</span><span class="p">:</span> <span class="w"> </span><span class="nt">fieldRef</span><span class="p">:</span> <span class="w"> </span><span class="nt">fieldPath</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">spec.nodeName</span> </pre></div> </div> </dd> <dt><code class="docutils literal notranslate"><span class="pre">env:</span> <span class="pre">'<name>',</span> <span class="pre">secret:</span> <span class="pre">'<secret>/<key>'</span></code></dt><dd><p><em>Can be specified multiple times</em></p> </dd> <dd><p>Defines an environment variable whose value is defined by the given <a class="reference external" href="https://kubernetes.io/docs/concepts/configuration/secret/">Secret</a> and key.</p> </dd> <dt><code class="docutils literal notranslate"><span class="pre">env:</span> <span class="pre">'<name>',</span> <span class="pre">value:</span> <span class="pre">'<value>'</span></code></dt><dd><p><em>Can be specified multiple times</em></p> </dd> <dd><p>Defines an environment variable with the given name and value.</p> </dd> <dt><code class="docutils literal notranslate"><span class="pre">hostPath:</span> <span class="pre">'/host/absolute/path',</span> <span class="pre">mountPath:</span> <span class="pre">'</pod/absolute/path>'</span></code></dt><dd><div class="versionadded"> <p><span class="versionmodified added">New in version 23.10.0.</span></p> </div> </dd> <dd><p><em>Can be specified multiple times</em></p> </dd> <dd><p>Allows creating <a class="reference external" href="https://kubernetes.io/docs/concepts/storage/volumes/#hostpath">hostPath</a> volume and access it with the specified <code class="docutils literal notranslate"><span class="pre">mountPath</span></code> in the pod.</p> </dd> <dt><code class="docutils literal notranslate"><span class="pre">imagePullPolicy:</span> <span class="pre">'IfNotPresent'</span> <span class="pre">|</span> <span class="pre">'Always'</span> <span class="pre">|</span> <span class="pre">'Never'</span></code></dt><dd><p>Specifies the <a class="reference external" href="https://kubernetes.io/docs/concepts/containers/images/#image-pull-policy">image pull policy</a> used by the pod to pull the container image.</p> </dd> <dt><code class="docutils literal notranslate"><span class="pre">imagePullSecret:</span> <span class="pre">'<name>'</span></code></dt><dd><p>Specifies the <a class="reference external" href="https://kubernetes.io/docs/concepts/containers/images/#specifying-imagepullsecrets-on-a-pod">image pull secret</a> used to access a private container image registry.</p> </dd> <dt><code class="docutils literal notranslate"><span class="pre">label:</span> <span class="pre">'<name>',</span> <span class="pre">value:</span> <span class="pre">'<value>'</span></code></dt><dd><p><em>Can be specified multiple times</em></p> </dd> <dd><p>Defines a pod <a class="reference external" href="https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/">label</a> with the given name and value.</p> </dd> <dt><code class="docutils literal notranslate"><span class="pre">nodeSelector:</span> <span class="pre"><config></span></code></dt><dd><p>Specifies the <a class="reference external" href="https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/#nodeselector">node selector</a> with the given configuration.</p> </dd> <dd><p>The configuration can be a map or a string:</p> <div class="highlight-groovy notranslate"><div class="highlight"><pre><span></span><span class="c1">// map</span> <span class="n">pod</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="o">[</span><span class="nl">nodeSelector:</span><span class="w"> </span><span class="o">[</span><span class="nl">disktype:</span><span class="w"> </span><span class="s1">'ssd'</span><span class="o">,</span><span class="w"> </span><span class="nl">cpu:</span><span class="w"> </span><span class="s1">'intel'</span><span class="o">]]</span> <span class="c1">// string</span> <span class="n">pod</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="o">[</span><span class="nl">nodeSelector:</span><span class="w"> </span><span class="s1">'disktype=ssd,cpu=intel'</span><span class="o">]</span> </pre></div> </div> </dd> <dt><code class="docutils literal notranslate"><span class="pre">priorityClassName:</span> <span class="pre">'<name>'</span></code></dt><dd><div class="versionadded"> <p><span class="versionmodified added">New in version 22.01.0-edge.</span></p> </div> </dd> <dd><p>Specifies the <a class="reference external" href="https://kubernetes.io/docs/concepts/scheduling-eviction/pod-priority-preemption/">priority class name</a> for pods.</p> </dd> <dt><code class="docutils literal notranslate"><span class="pre">privileged:</span> <span class="pre">true</span> <span class="pre">|</span> <span class="pre">false</span></code></dt><dd><div class="versionadded"> <p><span class="versionmodified added">New in version 22.05.0-edge.</span></p> </div> </dd> <dd><p>Specifies whether the pod should run as a <em>privileged</em> container (default: <code class="docutils literal notranslate"><span class="pre">false</span></code>).</p> </dd> <dt><code class="docutils literal notranslate"><span class="pre">runAsUser:</span> <span class="pre">'<uid>'</span></code></dt><dd><p>Specifies the user ID with which to run the container. Shortcut for the <code class="docutils literal notranslate"><span class="pre">securityContext</span></code> option.</p> </dd> <dt><code class="docutils literal notranslate"><span class="pre">schedulerName:</span> <span class="pre">'<name>'</span></code></dt><dd><p>Specifies which <a class="reference external" href="https://kubernetes.io/docs/tasks/extend-kubernetes/configure-multiple-schedulers/#specify-schedulers-for-pods">scheduler</a> is used to schedule the container.</p> </dd> <dt><code class="docutils literal notranslate"><span class="pre">secret:</span> <span class="pre">'<secret>/<key>',</span> <span class="pre">mountPath:</span> <span class="pre">'</absolute/path>'</span></code></dt><dd><p><em>Can be specified multiple times</em></p> </dd> <dd><p>Mounts a <a class="reference external" href="https://kubernetes.io/docs/concepts/configuration/secret/">Secret</a> with name and optional key to the given path. If the key is omitted, the path is interpreted as a directory and all entries in the <code class="docutils literal notranslate"><span class="pre">Secret</span></code> are exposed in that path.</p> </dd> <dt><code class="docutils literal notranslate"><span class="pre">securityContext:</span> <span class="pre"><config></span></code></dt><dd><p>Specifies the pod <a class="reference external" href="https://kubernetes.io/docs/tasks/configure-pod-container/security-context/">security context</a> with the given configuration.</p> </dd> <dt><code class="docutils literal notranslate"><span class="pre">toleration:</span> <span class="pre"><config></span></code></dt><dd><div class="versionadded"> <p><span class="versionmodified added">New in version 22.04.0.</span></p> </div> </dd> <dd><p><em>Can be specified multiple times</em></p> </dd> <dd><p>Specifies the pod <a class="reference external" href="https://kubernetes.io/docs/concepts/scheduling-eviction/taint-and-toleration/">toleration</a> with the given configuration.</p> </dd> <dd><p>The configuration should be a map corresponding to a single toleration rule. For example, the following pod options:</p> <div class="highlight-groovy notranslate"><div class="highlight"><pre><span></span><span class="n">pod</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="o">[</span> <span class="w"> </span><span class="o">[</span><span class="nl">toleration:</span><span class="w"> </span><span class="o">[</span><span class="nl">key:</span><span class="w"> </span><span class="s1">'key1'</span><span class="o">,</span><span class="w"> </span><span class="nl">operator:</span><span class="w"> </span><span class="s1">'Equal'</span><span class="o">,</span><span class="w"> </span><span class="nl">value:</span><span class="w"> </span><span class="s1">'value1'</span><span class="o">,</span><span class="w"> </span><span class="nl">effect:</span><span class="w"> </span><span class="s1">'NoSchedule'</span><span class="o">]],</span> <span class="w"> </span><span class="o">[</span><span class="nl">toleration:</span><span class="w"> </span><span class="o">[</span><span class="nl">key:</span><span class="w"> </span><span class="s1">'key1'</span><span class="o">,</span><span class="w"> </span><span class="nl">operator:</span><span class="w"> </span><span class="s1">'Exists'</span><span class="o">,</span><span class="w"> </span><span class="nl">effect:</span><span class="w"> </span><span class="s1">'NoSchedule'</span><span class="o">]],</span> <span class="o">]</span> </pre></div> </div> <p>Maps to the following pod spec:</p> <div class="highlight-yaml notranslate"><div class="highlight"><pre><span></span><span class="nt">tolerations</span><span class="p">:</span> <span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="nt">key</span><span class="p">:</span><span class="w"> </span><span class="s">"key1"</span> <span class="w"> </span><span class="nt">operator</span><span class="p">:</span><span class="w"> </span><span class="s">"Equal"</span> <span class="w"> </span><span class="nt">value</span><span class="p">:</span><span class="w"> </span><span class="s">"value1"</span> <span class="w"> </span><span class="nt">effect</span><span class="p">:</span><span class="w"> </span><span class="s">"NoSchedule"</span> <span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="nt">key</span><span class="p">:</span><span class="w"> </span><span class="s">"key1"</span> <span class="w"> </span><span class="nt">operator</span><span class="p">:</span><span class="w"> </span><span class="s">"Exists"</span> <span class="w"> </span><span class="nt">effect</span><span class="p">:</span><span class="w"> </span><span class="s">"NoSchedule"</span> </pre></div> </div> </dd> <dt><code class="docutils literal notranslate"><span class="pre">ttlSecondsAfterFinished</span></code></dt><dd><div class="versionadded"> <p><span class="versionmodified added">New in version 24.02.0-edge.</span></p> </div> </dd> <dd><p>Specifies the <a class="reference external" href="https://kubernetes.io/docs/concepts/workloads/controllers/job/#ttl-mechanism-for-finished-jobs">TTL mechanism</a> for finished jobs in seconds. Applies to both successful and failed jobs.</p> </dd> <dt><code class="docutils literal notranslate"><span class="pre">volumeClaim:</span> <span class="pre">'<name>',</span> <span class="pre">mountPath:</span> <span class="pre">'</absolute/path>'</span> <span class="pre">[,</span> <span class="pre">subPath:</span> <span class="pre">'<path>',</span> <span class="pre">readOnly:</span> <span class="pre">true</span> <span class="pre">|</span> <span class="pre">false]</span></code></dt><dd><p><em>Can be specified multiple times</em></p> </dd> <dd><p>Mounts a <a class="reference external" href="https://kubernetes.io/docs/concepts/storage/persistent-volumes/">Persistent volume claim</a> with the given name to the given path.</p> </dd> <dd><p>The <code class="docutils literal notranslate"><span class="pre">subPath</span></code> option can be used to mount a sub-directory of the volume instead of its root.</p> </dd> <dd><p>The <code class="docutils literal notranslate"><span class="pre">readOnly</span></code> option can be used to mount the volume as read-only (default: <code class="docutils literal notranslate"><span class="pre">false</span></code>)</p> </dd> </dl> </section> <section id="publishdir"> <span id="process-publishdir"></span><h3>publishDir<a class="headerlink" href="#publishdir" title="Permalink to this heading"></a></h3> <p>The <code class="docutils literal notranslate"><span class="pre">publishDir</span></code> directive allows you to publish the process output files to a specified folder. For example:</p> <div class="highlight-nextflow notranslate"><div class="highlight"><pre><span></span><span class="kd">process</span><span class="w"> </span><span class="n">foo</span><span class="w"> </span><span class="o">{</span> <span class="w"> </span><span class="n">publishDir</span><span class="w"> </span><span class="s1">'/data/chunks'</span> <span class="w"> </span><span class="kd">output</span><span class="o">:</span> <span class="w"> </span><span class="n">path</span><span class="w"> </span><span class="s1">'chunk_*'</span> <span class="w"> </span><span class="nl">script:</span> <span class="w"> </span><span class="s2">"""</span> <span class="s2"> printf 'Hola' | split -b 1 - chunk_</span> <span class="s2"> """</span> <span class="o">}</span> </pre></div> </div> <p>The above example splits the string <code class="docutils literal notranslate"><span class="pre">Hola</span></code> into file chunks of a single byte. When complete the <code class="docutils literal notranslate"><span class="pre">chunk_*</span></code> output files are published into the <code class="docutils literal notranslate"><span class="pre">/data/chunks</span></code> folder.</p> <div class="admonition note"> <p class="admonition-title">Note</p> <p>Only files that match the declaration in the <code class="docutils literal notranslate"><span class="pre">output</span></code> block are published, not all the outputs of the process.</p> </div> <div class="admonition tip"> <p class="admonition-title">Tip</p> <p>The <code class="docutils literal notranslate"><span class="pre">publishDir</span></code> directive can be specified more than once in order to publish output files to different target directories based on different rules.</p> </div> <p>By default files are published to the target folder creating a <em>symbolic link</em> for each process output that links the file produced into the process working directory. This behavior can be modified using the <code class="docutils literal notranslate"><span class="pre">mode</span></code> option, for example:</p> <div class="highlight-nextflow notranslate"><div class="highlight"><pre><span></span><span class="kd">process</span><span class="w"> </span><span class="n">foo</span><span class="w"> </span><span class="o">{</span> <span class="w"> </span><span class="n">publishDir</span><span class="w"> </span><span class="s1">'/data/chunks'</span><span class="o">,</span><span class="w"> </span><span class="nl">mode:</span><span class="w"> </span><span class="s1">'copy'</span><span class="o">,</span><span class="w"> </span><span class="nl">overwrite:</span><span class="w"> </span><span class="kc">false</span> <span class="w"> </span><span class="kd">output</span><span class="o">:</span> <span class="w"> </span><span class="n">path</span><span class="w"> </span><span class="s1">'chunk_*'</span> <span class="w"> </span><span class="nl">script:</span> <span class="w"> </span><span class="s2">"""</span> <span class="s2"> printf 'Hola' | split -b 1 - chunk_</span> <span class="s2"> """</span> <span class="o">}</span> </pre></div> </div> <div class="admonition warning"> <p class="admonition-title">Warning</p> <p>Files are copied into the specified directory in an <em>asynchronous</em> manner, so they may not be immediately available in the publish directory at the end of the process execution. For this reason, downstream processes should not try to access output files through the publish directory, but through channels.</p> </div> <p>Available options:</p> <dl class="simple myst"> <dt><code class="docutils literal notranslate"><span class="pre">contentType</span></code></dt><dd><div class="versionadded"> <p><span class="versionmodified added">New in version 22.10.0.</span></p> </div> </dd> <dd><p><em>Experimental: currently only supported for S3.</em></p> </dd> <dd><p>Allow specifying the media content type of the published file a.k.a. <a class="reference external" href="https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/MIME_Types">MIME type</a>. If set to <code class="docutils literal notranslate"><span class="pre">true</span></code>, the content type is inferred from the file extension (default: <code class="docutils literal notranslate"><span class="pre">false</span></code>).</p> </dd> <dt><code class="docutils literal notranslate"><span class="pre">enabled</span></code></dt><dd><p>Enable or disable the publish rule depending on the boolean value specified (default: <code class="docutils literal notranslate"><span class="pre">true</span></code>).</p> </dd> <dt><code class="docutils literal notranslate"><span class="pre">failOnError</span></code></dt><dd><div class="versionchanged"> <p><span class="versionmodified changed">Changed in version 24.03.0-edge: </span>The default value was changed from <code class="docutils literal notranslate"><span class="pre">false</span></code> to <code class="docutils literal notranslate"><span class="pre">true</span></code></p> </div> </dd> <dd><p>When <code class="docutils literal notranslate"><span class="pre">true</span></code> abort the execution if some file can’t be published to the specified target directory or bucket for any cause (default: <code class="docutils literal notranslate"><span class="pre">true</span></code>)</p> </dd> <dt><code class="docutils literal notranslate"><span class="pre">mode</span></code></dt><dd><p>The file publishing method. Can be one of the following values:</p> <ul class="simple"> <li><p><code class="docutils literal notranslate"><span class="pre">'copy'</span></code>: Copies the output files into the publish directory.</p></li> <li><p><code class="docutils literal notranslate"><span class="pre">'copyNoFollow'</span></code>: Copies the output files into the publish directory without following symlinks ie. copies the links themselves.</p></li> <li><p><code class="docutils literal notranslate"><span class="pre">'link'</span></code>: Creates a hard link in the publish directory for each output file.</p></li> <li><p><code class="docutils literal notranslate"><span class="pre">'move'</span></code>: Moves the output files into the publish directory. <strong>Note</strong>: this is only supposed to be used for a <em>terminal</em> process i.e. a process whose output is not consumed by any other downstream process.</p></li> <li><p><code class="docutils literal notranslate"><span class="pre">'rellink'</span></code>: Creates a relative symbolic link in the publish directory for each output file.</p></li> <li><p><code class="docutils literal notranslate"><span class="pre">'symlink'</span></code>: Creates an absolute symbolic link in the publish directory for each output file (default).</p></li> </ul> </dd> <dt><code class="docutils literal notranslate"><span class="pre">overwrite</span></code></dt><dd><p>When <code class="docutils literal notranslate"><span class="pre">true</span></code> any existing file in the specified folder will be overridden (default: <code class="docutils literal notranslate"><span class="pre">true</span></code> during normal pipeline execution and <code class="docutils literal notranslate"><span class="pre">false</span></code> when pipeline execution is <code class="docutils literal notranslate"><span class="pre">resumed</span></code>).</p> </dd> <dt><code class="docutils literal notranslate"><span class="pre">path</span></code></dt><dd><p>Specifies the directory where files need to be published. <strong>Note</strong>: the syntax <code class="docutils literal notranslate"><span class="pre">publishDir</span> <span class="pre">'/some/dir'</span></code> is a shortcut for <code class="docutils literal notranslate"><span class="pre">publishDir</span> <span class="pre">path:</span> <span class="pre">'/some/dir'</span></code>.</p> </dd> <dt><code class="docutils literal notranslate"><span class="pre">pattern</span></code></dt><dd><p>Specifies a [glob][glob] file pattern that selects which files to publish from the overall set of output files.</p> </dd> <dt><code class="docutils literal notranslate"><span class="pre">saveAs</span></code></dt><dd><p>A closure which, given the name of the file being published, returns the actual file name or a full path where the file is required to be stored. This can be used to rename or change the destination directory of the published files dynamically by using a custom strategy. Return the value <code class="docutils literal notranslate"><span class="pre">null</span></code> from the closure to <em>not</em> publish a file. This is useful when the process has multiple output files, but you want to publish only some of them.</p> </dd> <dt><code class="docutils literal notranslate"><span class="pre">storageClass</span></code></dt><dd><div class="versionadded"> <p><span class="versionmodified added">New in version 22.12.0-edge.</span></p> </div> </dd> <dd><p><em>Experimental: currently only supported for S3.</em></p> </dd> <dd><p>Allow specifying the storage class to be used for the published file.</p> </dd> <dt><code class="docutils literal notranslate"><span class="pre">tags</span></code></dt><dd><div class="versionadded"> <p><span class="versionmodified added">New in version 21.12.0-edge.</span></p> </div> </dd> <dd><p><em>Experimental: currently only supported for S3.</em></p> </dd> <dd><p>Allow the association of arbitrary tags with the published file e.g. <code class="docutils literal notranslate"><span class="pre">tags:</span> <span class="pre">[FOO:</span> <span class="pre">'Hello</span> <span class="pre">world']</span></code>.</p> </dd> </dl> </section> <section id="queue"> <span id="process-queue"></span><h3>queue<a class="headerlink" href="#queue" title="Permalink to this heading"></a></h3> <p>The <code class="docutils literal notranslate"><span class="pre">queue</span></code> directive allows you to set the <code class="docutils literal notranslate"><span class="pre">queue</span></code> where jobs are scheduled when using a grid based executor in your pipeline. For example:</p> <div class="highlight-nextflow notranslate"><div class="highlight"><pre><span></span><span class="kd">process</span><span class="w"> </span><span class="n">grid_job</span><span class="w"> </span><span class="o">{</span> <span class="w"> </span><span class="n">queue</span><span class="w"> </span><span class="s1">'long'</span> <span class="w"> </span><span class="n">executor</span><span class="w"> </span><span class="s1">'sge'</span> <span class="w"> </span><span class="nl">script:</span> <span class="w"> </span><span class="s2">"""</span> <span class="s2"> your_command --here</span> <span class="s2"> """</span> <span class="o">}</span> </pre></div> </div> <div class="admonition tip"> <p class="admonition-title">Tip</p> <p>Some grid executors support multiple queue names as a comma-separated list:</p> <div class="highlight-nextflow notranslate"><div class="highlight"><pre><span></span><span class="n">queue</span><span class="w"> </span><span class="s1">'short,long,cn-el6'</span> </pre></div> </div> <p>However, this does not generally apply to other executors such as AWS Batch, Azure Batch, Google Batch.</p> </div> <div class="admonition note"> <p class="admonition-title">Note</p> <p>This directive is only used by certain executors. Refer to the <a class="reference internal" href="../executor.html#executor-page"><span class="std std-ref">Executors</span></a> page to see which executors support this directive.</p> </div> </section> <section id="resourcelabels"> <span id="process-resourcelabels"></span><h3>resourceLabels<a class="headerlink" href="#resourcelabels" title="Permalink to this heading"></a></h3> <div class="versionadded"> <p><span class="versionmodified added">New in version 22.09.1-edge.</span></p> </div> <p>The <code class="docutils literal notranslate"><span class="pre">resourceLabels</span></code> directive allows you to specify custom name-value pairs that Nextflow applies to the computing resource used to carry out the process execution. Resource labels can be specified using the syntax shown below:</p> <div class="highlight-nextflow notranslate"><div class="highlight"><pre><span></span><span class="kd">process</span><span class="w"> </span><span class="n">my_task</span><span class="w"> </span><span class="o">{</span> <span class="w"> </span><span class="n">resourceLabels</span><span class="w"> </span><span class="nl">region:</span><span class="w"> </span><span class="s1">'some-region'</span><span class="o">,</span><span class="w"> </span><span class="nl">user:</span><span class="w"> </span><span class="s1">'some-username'</span> <span class="w"> </span><span class="nl">script:</span> <span class="w"> </span><span class="s2">"""</span> <span class="s2"> your_command --here</span> <span class="s2"> """</span> <span class="o">}</span> </pre></div> </div> <p>The limits and the syntax of the corresponding cloud provider should be taken into consideration when using resource labels.</p> <p>Resource labels are currently supported by the following executors:</p> <ul class="simple"> <li><p><a class="reference internal" href="../executor.html#awsbatch-executor"><span class="std std-ref">AWS Batch</span></a></p></li> <li><p><a class="reference internal" href="../executor.html#azurebatch-executor"><span class="std std-ref">Azure Batch</span></a></p></li> <li><p><a class="reference internal" href="../executor.html#google-batch-executor"><span class="std std-ref">Google Cloud Batch</span></a></p></li> <li><p><a class="reference internal" href="../executor.html#google-lifesciences-executor"><span class="std std-ref">Google Life Sciences</span></a></p></li> <li><p><a class="reference internal" href="../executor.html#k8s-executor"><span class="std std-ref">Kubernetes</span></a></p></li> </ul> <div class="versionadded"> <p><span class="versionmodified added">New in version 23.09.0-edge: </span>Resource labels are supported for Azure Batch when using automatic pool creation.</p> <p>Resource labels in Azure are added to pools, rather than jobs, in order to facilitate cost analysis. A new pool will be created for each new set of resource labels, therefore it is recommended to also set <code class="docutils literal notranslate"><span class="pre">azure.batch.deletePoolsOnCompletion</span> <span class="pre">=</span> <span class="pre">true</span></code> when using process-specific resource labels.</p> </div> <p>See also: <a class="reference internal" href="#label"><span class="std std-doc">label</span></a></p> </section> <section id="resourcelimits"> <span id="process-resourcelimits"></span><h3>resourceLimits<a class="headerlink" href="#resourcelimits" title="Permalink to this heading"></a></h3> <div class="versionadded"> <p><span class="versionmodified added">New in version 24.04.0.</span></p> </div> <p>The <code class="docutils literal notranslate"><span class="pre">resourceLimits</span></code> directive allows you to specify environment-specific limits for task resource requests. Resource limits can be specified in a process as follows:</p> <div class="highlight-nextflow notranslate"><div class="highlight"><pre><span></span><span class="kd">process</span><span class="w"> </span><span class="n">my_task</span><span class="w"> </span><span class="o">{</span> <span class="w"> </span><span class="n">resourceLimits</span><span class="w"> </span><span class="nl">cpus:</span><span class="w"> </span><span class="mi">24</span><span class="o">,</span><span class="w"> </span><span class="nl">memory:</span><span class="w"> </span><span class="mi">768</span><span class="o">.</span><span class="na">GB</span><span class="o">,</span><span class="w"> </span><span class="nl">time:</span><span class="w"> </span><span class="mi">72</span><span class="o">.</span><span class="na">h</span> <span class="w"> </span><span class="nl">script:</span> <span class="w"> </span><span class="s2">"""</span> <span class="s2"> your_command --here</span> <span class="s2"> """</span> <span class="o">}</span> </pre></div> </div> <p>Or in the Nextflow configuration:</p> <div class="highlight-nextflow notranslate"><div class="highlight"><pre><span></span><span class="kd">process</span><span class="w"> </span><span class="o">{</span> <span class="w"> </span><span class="n">resourceLimits</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="o">[</span><span class="w"> </span><span class="nl">cpus:</span><span class="w"> </span><span class="mi">24</span><span class="o">,</span><span class="w"> </span><span class="nl">memory:</span><span class="w"> </span><span class="mi">768</span><span class="o">.</span><span class="na">GB</span><span class="o">,</span><span class="w"> </span><span class="nl">time:</span><span class="w"> </span><span class="mi">72</span><span class="o">.</span><span class="na">h</span><span class="w"> </span><span class="o">]</span> <span class="o">}</span> </pre></div> </div> <p>Resource limits can be defined for the following directives:</p> <ul class="simple"> <li><p><a class="reference internal" href="#cpus"><span class="std std-doc">cpus</span></a></p></li> <li><p><a class="reference internal" href="#disk"><span class="std std-doc">disk</span></a></p></li> <li><p><a class="reference internal" href="#memory"><span class="std std-doc">memory</span></a></p></li> <li><p><a class="reference internal" href="#time"><span class="std std-doc">time</span></a></p></li> </ul> <p>Resource limits are a useful way to specify environment-specific limits alongside tasks with <a class="reference internal" href="../process.html#dynamic-task-resources"><span class="std std-ref">dynamic resources</span></a>. Normally, if a task requests more resources than can be provisioned (e.g. a task requests 32 cores but the largest node in the cluster has 24), the task will either fail or cause the pipeline to hang forever as it will never be scheduled. If the <code class="docutils literal notranslate"><span class="pre">resourceLimits</span></code> directive is defined with these limits, the task resources will be automatically reduced to comply with these limits before the job is submitted.</p> </section> <section id="scratch"> <span id="process-scratch"></span><h3>scratch<a class="headerlink" href="#scratch" title="Permalink to this heading"></a></h3> <p>The <code class="docutils literal notranslate"><span class="pre">scratch</span></code> directive allows you to execute the process in a temporary folder that is local to the execution node.</p> <p>This is useful when your pipeline is launched by using a grid executor, because it allows you to decrease the NFS overhead by running the pipeline processes in a temporary directory in the local disk of the actual execution node. Only the files declared as output in the process definition will be copied in the pipeline working area.</p> <p>In its basic form simply specify <code class="docutils literal notranslate"><span class="pre">true</span></code> at the directive value, as shown below:</p> <div class="highlight-nextflow notranslate"><div class="highlight"><pre><span></span><span class="kd">process</span><span class="w"> </span><span class="n">simpleTask</span><span class="w"> </span><span class="o">{</span> <span class="w"> </span><span class="n">scratch</span><span class="w"> </span><span class="kc">true</span> <span class="w"> </span><span class="kd">output</span><span class="o">:</span> <span class="w"> </span><span class="n">path</span><span class="w"> </span><span class="s1">'data_out'</span> <span class="w"> </span><span class="nl">script:</span> <span class="w"> </span><span class="s2">"""</span> <span class="s2"> your_command --here</span> <span class="s2"> """</span> <span class="o">}</span> </pre></div> </div> <p>By doing this, it tries to execute the script in the directory defined by the variable <code class="docutils literal notranslate"><span class="pre">$TMPDIR</span></code> in the execution node. If this variable does not exist, it will create a new temporary directory by using the Linux command <code class="docutils literal notranslate"><span class="pre">mktemp</span></code>.</p> <div class="admonition note"> <p class="admonition-title">Note</p> <p>Cloud-based executors use <code class="docutils literal notranslate"><span class="pre">scratch</span> <span class="pre">=</span> <span class="pre">true</span></code> by default, since the work directory resides in object storage.</p> </div> <p>The following values are supported:</p> <dl class="simple myst"> <dt><code class="docutils literal notranslate"><span class="pre">false</span></code></dt><dd><p>Do not use a scratch directory.</p> </dd> <dt><code class="docutils literal notranslate"><span class="pre">true</span></code></dt><dd><p>Create a scratch directory in the directory defined by the <code class="docutils literal notranslate"><span class="pre">$TMPDIR</span></code> environment variable, or <code class="docutils literal notranslate"><span class="pre">$(mktemp</span> <span class="pre">/tmp)</span></code> if <code class="docutils literal notranslate"><span class="pre">$TMPDIR</span></code> is not set.</p> </dd> <dt><code class="docutils literal notranslate"><span class="pre">'$YOUR_VAR'</span></code></dt><dd><p>Create a scratch directory in the directory defined by the given environment variable, or <code class="docutils literal notranslate"><span class="pre">$(mktemp</span> <span class="pre">/tmp)</span></code> if that variable is not set. The value must use single quotes, otherwise the environment variable will be evaluated in the pipeline script context.</p> </dd> <dt><code class="docutils literal notranslate"><span class="pre">'/my/tmp/path'</span></code></dt><dd><p>Create a scratch directory in the specified directory.</p> </dd> <dt><code class="docutils literal notranslate"><span class="pre">'ram-disk'</span></code></dt><dd><p>Create a scratch directory in the RAM disk <code class="docutils literal notranslate"><span class="pre">/dev/shm/</span></code>.</p> </dd> </dl> </section> <section id="shell"> <span id="process-directive-shell"></span><h3>shell<a class="headerlink" href="#shell" title="Permalink to this heading"></a></h3> <p>The <code class="docutils literal notranslate"><span class="pre">shell</span></code> directive allows you to define a custom shell command for process scripts. By default, script blocks are executed with <code class="docutils literal notranslate"><span class="pre">/bin/bash</span> <span class="pre">-ue</span></code>.</p> <div class="highlight-nextflow notranslate"><div class="highlight"><pre><span></span><span class="kd">process</span><span class="w"> </span><span class="n">doMoreThings</span><span class="w"> </span><span class="o">{</span> <span class="w"> </span><span class="n">shell</span><span class="w"> </span><span class="s1">'/bin/bash'</span><span class="o">,</span><span class="w"> </span><span class="s1">'-euo'</span><span class="o">,</span><span class="w"> </span><span class="s1">'pipefail'</span> <span class="w"> </span><span class="nl">script:</span> <span class="w"> </span><span class="s2">"""</span> <span class="s2"> your_command --here</span> <span class="s2"> """</span> <span class="o">}</span> </pre></div> </div> <p>The same directive could be specified in your Nextflow configuration as follows:</p> <div class="highlight-groovy notranslate"><div class="highlight"><pre><span></span><span class="n">process</span><span class="o">.</span><span class="na">shell</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="o">[</span><span class="s1">'/bin/bash'</span><span class="o">,</span><span class="w"> </span><span class="s1">'-euo'</span><span class="o">,</span><span class="w"> </span><span class="s1">'pipefail'</span><span class="o">]</span> </pre></div> </div> </section> <section id="spack"> <span id="process-spack"></span><h3>spack<a class="headerlink" href="#spack" title="Permalink to this heading"></a></h3> <p>The <code class="docutils literal notranslate"><span class="pre">spack</span></code> directive allows for the definition of the process dependencies using the <a class="reference external" href="https://spack.io">Spack</a> package manager.</p> <p>Nextflow automatically sets up an environment for the given package names listed by in the <code class="docutils literal notranslate"><span class="pre">spack</span></code> directive. For example:</p> <div class="highlight-nextflow notranslate"><div class="highlight"><pre><span></span><span class="kd">process</span><span class="w"> </span><span class="n">foo</span><span class="w"> </span><span class="o">{</span> <span class="w"> </span><span class="n">spack</span><span class="w"> </span><span class="s1">'bwa@0.7.15'</span> <span class="w"> </span><span class="nl">script:</span> <span class="w"> </span><span class="s2">"""</span> <span class="s2"> your_command --here</span> <span class="s2"> """</span> <span class="o">}</span> </pre></div> </div> <p>Multiple packages can be specified separating them with a blank space, e.g. <code class="docutils literal notranslate"><span class="pre">bwa@0.7.15</span> <span class="pre">fastqc@0.11.5</span></code>.</p> <p>The <code class="docutils literal notranslate"><span class="pre">spack</span></code> directive also allows the specification of a Spack environment file path or the path of an existing environment directory. See the <a class="reference internal" href="../spack.html#spack-page"><span class="std std-ref">Spack environments</span></a> page for further details.</p> </section> <section id="stageinmode"> <span id="process-stageinmode"></span><h3>stageInMode<a class="headerlink" href="#stageinmode" title="Permalink to this heading"></a></h3> <p>The <code class="docutils literal notranslate"><span class="pre">stageInMode</span></code> directive defines how input files are staged into the process work directory. The following values are allowed:</p> <dl class="simple myst"> <dt><code class="docutils literal notranslate"><span class="pre">'copy'</span></code></dt><dd><p>Input files are staged in the process work directory by creating a copy.</p> </dd> <dt><code class="docutils literal notranslate"><span class="pre">'link'</span></code></dt><dd><p>Input files are staged in the process work directory by creating a hard link for each of them.</p> </dd> <dt><code class="docutils literal notranslate"><span class="pre">'rellink'</span></code></dt><dd><p>Input files are staged in the process work directory by creating a symbolic link with a relative path for each of them.</p> </dd> <dt><code class="docutils literal notranslate"><span class="pre">'symlink'</span></code></dt><dd><p>Input files are staged in the process work directory by creating a symbolic link with an absolute path for each of them (default).</p> </dd> </dl> </section> <section id="stageoutmode"> <span id="process-stageoutmode"></span><h3>stageOutMode<a class="headerlink" href="#stageoutmode" title="Permalink to this heading"></a></h3> <p>The <code class="docutils literal notranslate"><span class="pre">stageOutMode</span></code> directive defines how output files are staged out from the scratch directory to the process work directory. The following values are allowed:</p> <dl class="simple myst"> <dt><code class="docutils literal notranslate"><span class="pre">'copy'</span></code></dt><dd><p>Output files are copied from the scratch directory to the work directory.</p> </dd> <dt><code class="docutils literal notranslate"><span class="pre">'fcp'</span></code></dt><dd><div class="versionadded"> <p><span class="versionmodified added">New in version 23.02.0-edge.</span></p> </div> </dd> <dd><p>Output files are copied from the scratch directory to the work directory by using the <a class="reference external" href="https://github.com/Svetlitski/fcp">fcp</a> utility (note: it must be available in your cluster computing nodes).</p> </dd> <dt><code class="docutils literal notranslate"><span class="pre">'move'</span></code></dt><dd><p>Output files are moved from the scratch directory to the work directory.</p> </dd> <dt><code class="docutils literal notranslate"><span class="pre">'rclone'</span></code></dt><dd><div class="versionadded"> <p><span class="versionmodified added">New in version 23.01.0-edge.</span></p> </div> </dd> <dd><p>Output files are copied from the scratch directory to the work directory by using the <a class="reference external" href="https://rclone.org">rclone</a> utility (note: it must be available in your cluster computing nodes).</p> </dd> <dt><code class="docutils literal notranslate"><span class="pre">'rsync'</span></code></dt><dd><p>Output files are copied from the scratch directory to the work directory by using the <code class="docutils literal notranslate"><span class="pre">rsync</span></code> utility.</p> </dd> </dl> <p>See also: <a class="reference internal" href="#scratch"><span class="std std-doc">scratch</span></a>.</p> </section> <section id="storedir"> <span id="process-storedir"></span><h3>storeDir<a class="headerlink" href="#storedir" title="Permalink to this heading"></a></h3> <p>The <code class="docutils literal notranslate"><span class="pre">storeDir</span></code> directive allows you to define a directory that is used as a <em>permanent</em> cache for your process results.</p> <p>In more detail, it affects the process execution in two main ways:</p> <ol class="arabic simple"> <li><p>The process is executed only if the files declared in the <code class="docutils literal notranslate"><span class="pre">output</span></code> block do not exist in the directory specified by the <code class="docutils literal notranslate"><span class="pre">storeDir</span></code> directive. When the files exist the process execution is skipped and these files are used as the actual process result.</p></li> <li><p>Whenever a process is successfully completed the files listed in the <code class="docutils literal notranslate"><span class="pre">output</span></code> block are moved into the directory specified by the <code class="docutils literal notranslate"><span class="pre">storeDir</span></code> directive.</p></li> </ol> <p>The following example shows how to use the <code class="docutils literal notranslate"><span class="pre">storeDir</span></code> directive to create a directory containing a BLAST database for each species specified by an input parameter:</p> <div class="highlight-nextflow notranslate"><div class="highlight"><pre><span></span><span class="kd">process</span><span class="w"> </span><span class="n">formatBlastDatabases</span><span class="w"> </span><span class="o">{</span> <span class="w"> </span><span class="n">storeDir</span><span class="w"> </span><span class="s1">'/db/genomes'</span> <span class="w"> </span><span class="nl">input:</span> <span class="w"> </span><span class="n">path</span><span class="w"> </span><span class="n">species</span> <span class="w"> </span><span class="kd">output</span><span class="o">:</span> <span class="w"> </span><span class="n">path</span><span class="w"> </span><span class="s2">"${dbName}.*"</span> <span class="w"> </span><span class="nl">script:</span> <span class="w"> </span><span class="n">dbName</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">species</span><span class="o">.</span><span class="na">baseName</span> <span class="w"> </span><span class="s2">"""</span> <span class="s2"> makeblastdb -dbtype nucl -in ${species} -out ${dbName}</span> <span class="s2"> """</span> <span class="o">}</span> </pre></div> </div> <div class="admonition warning"> <p class="admonition-title">Warning</p> <p>If a process uses <code class="docutils literal notranslate"><span class="pre">storeDir</span></code> and all of its outputs are optional, the process will always be skipped, even if the store directory is empty. This issue can be avoided by specifying at least one required file output.</p> </div> <div class="admonition warning"> <p class="admonition-title">Warning</p> <p>The <code class="docutils literal notranslate"><span class="pre">storeDir</span></code> directive should not be used to publish workflow outputs. Use the <a class="reference internal" href="#publishdir"><span class="std std-doc">publishDir</span></a> directive or the <a class="reference internal" href="../workflow.html#workflow-output-def"><span class="std std-ref">workflow output definition</span></a> instead.</p> </div> </section> <section id="tag"> <span id="process-tag"></span><h3>tag<a class="headerlink" href="#tag" title="Permalink to this heading"></a></h3> <p>The <code class="docutils literal notranslate"><span class="pre">tag</span></code> directive allows you to associate each process execution with a custom label, so that it will be easier to identify them in the log file or in the trace execution report. For example:</p> <div class="highlight-nextflow notranslate"><div class="highlight"><pre><span></span><span class="kd">process</span><span class="w"> </span><span class="n">foo</span><span class="w"> </span><span class="o">{</span> <span class="w"> </span><span class="n">tag</span><span class="w"> </span><span class="s2">"$code"</span> <span class="w"> </span><span class="nl">input:</span> <span class="w"> </span><span class="n">val</span><span class="w"> </span><span class="n">code</span> <span class="w"> </span><span class="nl">script:</span> <span class="w"> </span><span class="s2">"""</span> <span class="s2"> echo $code</span> <span class="s2"> """</span> <span class="o">}</span> <span class="kd">workflow</span><span class="w"> </span><span class="o">{</span> <span class="w"> </span><span class="n">Channel</span><span class="o">.</span><span class="na">of</span><span class="o">(</span><span class="s1">'alpha'</span><span class="o">,</span><span class="w"> </span><span class="s1">'gamma'</span><span class="o">,</span><span class="w"> </span><span class="s1">'omega'</span><span class="o">)</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="n">foo</span> <span class="o">}</span> </pre></div> </div> <p>The above snippet will print a log similar to the following one, where process names contain the tag value:</p> <div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="p">[</span><span class="mi">6</span><span class="n">e</span><span class="o">/</span><span class="mi">28919</span><span class="n">b</span><span class="p">]</span> <span class="n">Submitted</span> <span class="n">process</span> <span class="o">></span> <span class="n">foo</span> <span class="p">(</span><span class="n">alpha</span><span class="p">)</span> <span class="p">[</span><span class="n">d2</span><span class="o">/</span><span class="mi">1</span><span class="n">c6175</span><span class="p">]</span> <span class="n">Submitted</span> <span class="n">process</span> <span class="o">></span> <span class="n">foo</span> <span class="p">(</span><span class="n">gamma</span><span class="p">)</span> <span class="p">[</span><span class="mi">1</span><span class="n">c</span><span class="o">/</span><span class="mi">3</span><span class="n">ef220</span><span class="p">]</span> <span class="n">Submitted</span> <span class="n">process</span> <span class="o">></span> <span class="n">foo</span> <span class="p">(</span><span class="n">omega</span><span class="p">)</span> </pre></div> </div> <p>See also <a class="reference internal" href="../reports.html#trace-report"><span class="std std-ref">Trace execution report</span></a></p> </section> <section id="time"> <span id="process-time"></span><h3>time<a class="headerlink" href="#time" title="Permalink to this heading"></a></h3> <p>The <code class="docutils literal notranslate"><span class="pre">time</span></code> directive allows you to define how long a process is allowed to run. For example:</p> <div class="highlight-nextflow notranslate"><div class="highlight"><pre><span></span><span class="kd">process</span><span class="w"> </span><span class="n">big_job</span><span class="w"> </span><span class="o">{</span> <span class="w"> </span><span class="n">time</span><span class="w"> </span><span class="s1">'1h'</span> <span class="w"> </span><span class="nl">script:</span> <span class="w"> </span><span class="s2">"""</span> <span class="s2"> your_command --here</span> <span class="s2"> """</span> <span class="o">}</span> </pre></div> </div> <p>The following time unit suffixes can be used when specifying the duration value:</p> <table class="docutils align-default"> <thead> <tr class="row-odd"><th class="head"><p>Unit</p></th> <th class="head"><p>Description</p></th> </tr> </thead> <tbody> <tr class="row-even"><td><p><code class="docutils literal notranslate"><span class="pre">ms</span></code>, <code class="docutils literal notranslate"><span class="pre">milli</span></code>, <code class="docutils literal notranslate"><span class="pre">millis</span></code></p></td> <td><p>Milliseconds</p></td> </tr> <tr class="row-odd"><td><p><code class="docutils literal notranslate"><span class="pre">s</span></code>, <code class="docutils literal notranslate"><span class="pre">sec</span></code>, <code class="docutils literal notranslate"><span class="pre">second</span></code>, <code class="docutils literal notranslate"><span class="pre">seconds</span></code></p></td> <td><p>Seconds</p></td> </tr> <tr class="row-even"><td><p><code class="docutils literal notranslate"><span class="pre">m</span></code>, <code class="docutils literal notranslate"><span class="pre">min</span></code>, <code class="docutils literal notranslate"><span class="pre">minute</span></code>, <code class="docutils literal notranslate"><span class="pre">minutes</span></code></p></td> <td><p>Minutes</p></td> </tr> <tr class="row-odd"><td><p><code class="docutils literal notranslate"><span class="pre">h</span></code>, <code class="docutils literal notranslate"><span class="pre">hour</span></code>, <code class="docutils literal notranslate"><span class="pre">hours</span></code></p></td> <td><p>Hours</p></td> </tr> <tr class="row-even"><td><p><code class="docutils literal notranslate"><span class="pre">d</span></code>, <code class="docutils literal notranslate"><span class="pre">day</span></code>, <code class="docutils literal notranslate"><span class="pre">days</span></code></p></td> <td><p>Days</p></td> </tr> </tbody> </table> <p>Multiple units can be used in a single declaration, for example: <code class="docutils literal notranslate"><span class="pre">'1day</span> <span class="pre">6hours</span> <span class="pre">3minutes</span> <span class="pre">30seconds'</span></code></p> <p>See <a class="reference internal" href="stdlib.html#stdlib-types-duration"><span class="std std-ref">Duration</span></a> for more information.</p> <div class="admonition note"> <p class="admonition-title">Note</p> <p>This directive is only used by certain executors. Refer to the <a class="reference internal" href="../executor.html#executor-page"><span class="std std-ref">Executors</span></a> page to see which executors support this directive.</p> </div> <p>See also: <a class="reference internal" href="#cpus"><span class="std std-doc">cpus</span></a>, <a class="reference internal" href="#memory"><span class="std std-doc">memory</span></a>, <a class="reference internal" href="#queue"><span class="std std-doc">queue</span></a> and <a class="reference internal" href="../process.html#dynamic-task-resources"><span class="std std-ref">Dynamic task resources</span></a>.</p> </section> </section> </section> </div> </div> <footer><div class="rst-footer-buttons" role="navigation" aria-label="Footer"> <a href="stdlib.html" class="btn btn-neutral float-left" title="Standard library" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Previous</a> <a href="channel.html" class="btn btn-neutral float-right" title="Channel factories" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a> </div> <hr/> <div role="contentinfo"> <p>© Copyright 2025, Seqera Labs, S.L.</p> </div> Built with <a href="https://www.sphinx-doc.org/">Sphinx</a> using a <a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>. </footer> </div> </div> </section> </div> <script> jQuery(function () { SphinxRtdTheme.Navigation.enable(true); }); </script> <!-- Google Tag Manager (noscript) --> <noscript><iframe src="https://www.googletagmanager.com/ns.html?id=GTM-TNCXSWG" height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript> <!-- End Google Tag Manager (noscript) --> </body> </html>