General
When working with Seqera Platform, you might encounter the following issues.
Common errors
timeout is not an integer or out of range
This error occurs when your Redis instance is older than the version Seqera Platform requires. Seqera Platform 24.2 to 25.3 requires Redis 6.2 or later. Seqera Platform 26.1 and later does not support Redis 6.x. To resolve, upgrade your Redis instance to a supported version according to your cloud provider's instructions. From 26.1, use Redis 7.2 or 7.4, or migrate to Valkey 7.x. See Cache layer changes for the full support matrix.
Unknown pipeline repository or missing credentials from public GitHub repositories
GitHub imposes rate limits on repository pulls, including public repositories. GitHub caps unauthenticated requests at 60 per hour and authenticated requests at 5000 per hour. The 60-per-hour cap usually causes this error. For the same error on a private organization-owned repository, see the following entry.
To resolve:
-
Ensure there's at least one GitHub credential in your workspace's Credentials tab.
-
Ensure the Access token field of every GitHub credential is populated with a personal access token and not a user password. GitHub personal access tokens (PATs) are typically longer than passwords and include a
ghp_prefix. For example:ghp_IqIMNOZH6zOwIEB4T9A2g4EHMy8Ji42q4HA -
Confirm that your PAT provides the elevated threshold and that transactions are charged against it:
curl -H "Authorization: token ghp_LONG_ALPHANUMERIC_PAT" -H "Accept: application/vnd.github.v3+json" https://api.github.com/rate_limit
Unknown pipeline repository or expired Git credentials from private organization-owned GitHub repositories
GitHub organizations can restrict token access independently of your own repository access. GitHub returns 404 for private repositories that a token can't access. Seqera reports 401, 403, and 404 responses as this same error, even when the workspace credential works for user-owned repositories.
Check the following:
- The repository URL is exactly
https://github.com/<org>/<repo>, with no.gitsuffix or/tree/<branch>segment. - The token can access the organization's repositories:
- Fine-grained tokens must be created with the organization as the resource owner. The organization must allow fine-grained tokens and may need to approve yours.
- Classic tokens require the
reposcope and, if the organization enforces SAML single sign-on (SSO), SSO authorization for that organization. - GitHub Apps must be installed on the organization with access to the repository.
To test the token stored in the workspace credential:
curl -sS -D - -o /dev/null \
-H "Authorization: Bearer <your_access_token>" \
-H "Accept: application/vnd.github+json" \
https://api.github.com/repos/<org>/<repo>
A 404 response means the token can't see the repository. To resolve, re-authorize or re-scope the token in GitHub. A 403 response with an X-GitHub-SSO header means the token needs SSO authorization. A 200 response means the token is valid. Check which credential the workspace selects in Multiple credential filtering.
For the same error on a public repository, see the previous entry.
Row was updated or deleted by another transaction (or unsaved-value mapping was incorrect)
This error occurs when incorrect configuration values are assigned to the backend and cron containers' MICRONAUT_ENVIRONMENTS environment variable. You might see other unexpected behavior, such as two exact copies of the same Nextflow job submitted to the executor for scheduling.
Verify the following:
- The
MICRONAUT_ENVIRONMENTSenvironment variable associated with thebackendcontainer:- Contains
prod,redis,ha - Does not contain
cron
- Contains
- The
MICRONAUT_ENVIRONMENTSenvironment variable associated with thecroncontainer:- Contains
prod,redis,cron - Does not contain
ha
- Contains
- You don't have another copy of the
MICRONAUT_ENVIRONMENTSenvironment variable defined elsewhere in your application (such as atower.envfile or KubernetesConfigMap). - If you're using a separate container/pod to execute
migrate-db.sh, ensure there's noMICRONAUT_ENVIRONMENTSenvironment variable assigned to it.
No such variable
This error occurs when you execute a DSL1-based Nextflow workflow with Nextflow 22.03.0-edge or later.
"<parameter>" must be string when launching a pipeline
This error occurs when a parameter nested inside an object-typed schema group has a null value. Seqera Platform tolerates null and blank values for top-level parameters only. The error message concatenates the group and parameter names. Omit optional nested parameters instead of setting them to null:
# Fails validation
alignment:
aligner: bwa
reference: null
# Passes validation
alignment:
aligner: bwa
Nextflow resolves a missing key to null at runtime. Your pipeline logic behaves the same. For more information, see Pipeline schema.
Sleep commands in Nextflow workflows
The behavior of sleep commands in your Nextflow workflows depends on where they are used:
- In an
errorStrategyblock, Nextflow uses the Groovy sleep function, which takes its value in milliseconds. - In a process script block, that language's sleep binary or method is used. For example, this bash script uses the bash sleep binary, which takes its value in seconds.
Limit of N running workflows reached
This error occurs at launch when your organization reaches its quota of concurrent active pipeline runs. All runs in SUBMITTED or RUNNING status across the organization's workspaces count toward the quota. Your Seqera license sets the limit. The related error Organizational quota limit fully restricts usage of running workflows means the quota blocks all launches in the organization.
To resolve:
- Cancel any runs stuck in
SUBMITTEDstatus. Active runs occupy quota until they complete or you cancel them. - Contact Seqera support to raise the quota.
Seqera Platform retrieves license changes when it next polls the license server, every 24 hours by default.
Containers
Use rootless containers in Nextflow pipelines
Most containers use the root user by default. Some users prefer a non-root user in the container to minimize the risk of privilege escalation. Because Nextflow and its tasks use a shared work directory to manage input and output data, rootless containers can cause file permission errors in some environments:
touch: cannot touch '/fsx/work/ab/27d78d2b9b17ee895b88fcee794226/.command.begin': Permission denied
This should not occur with AWS Batch from Seqera version 22.1.0. In other cases, force all task containers to run as root. Add one of the following to your Nextflow configuration:
// cloud executors
process.containerOptions = "--user 0:0"
// Kubernetes
k8s.securityContext = [
"runAsUser": 0,
"runAsGroup": 0
]
Databases
Database connection failure in Seqera Enterprise 22.2.0
Seqera Enterprise 22.2.0 introduced a breaking change: TOWER_DB_DRIVER must now be org.mariadb.jdbc.Driver.
If you use Amazon Aurora as your database, you might encounter a java.sql.SQLNonTransientConnectionException: ... could not load system variables error, likely because of a known error tracked in the MariaDB project.
To resolve, modify the Seqera Enterprise configuration:
- Ensure your
TOWER_DB_DRIVERuses the specified MariaDB URI. - Modify your
TOWER_DB_URLto:TOWER_DB_URL=jdbc:mysql://<domain>:<port>/<database-name>?usePipelineAuth=false&useBatchMultiSend=false
java.sql.SQLException time zone errors on login
After login authentication, Seqera presents an Unexpected error while processing error, with java.sql.SQLException errors related to the server time zone in the backend log:
Error log
io.micronaut.transaction.exceptions.CannotCreateTransactionException: Could not open Hibernate Session for transaction
…
Caused by: org.hibernate.exception.GenericJDBCException: Unable to acquire JDBC Connection
…
java.sql.SQLException: The server time zone value 'CEST' is unrecognized or represents more than one time zone. You must configure either the server or JDBC driver (via the 'serverTimezone' configuration property) to use a more specific time zone value if you want to utilize time zone support.
…
Seqera can't connect to the database because the JDBC client doesn't specify a time zone. Set it with the serverTimezone property.
To resolve, append serverTimezone to TOWER_DB_URL. For the Europe/Amsterdam time zone:
export TOWER_DB_URL="jdbc:mysql://<database-ip>:3306/tower?permitMysqlScheme=true&serverTimezone=Europe/Amsterdam"
java.io.IOException: Unsupported protocol version 252
When a service is restarted or otherwise interrupted, it can create invalid entries that corrupt your installation's Redis cache. Completed or terminated runs then display as in progress. To resolve, delete the key with the invalid entry (replace <container-name> with your container name):
## Check if the key exists
docker exec -ti <container-name> redis-cli keys \* | grep workflow
## Show the hash contents of the key
docker exec -ti <container-name> redis-cli hgetall "workflow/modified"
## Delete the key
docker exec -ti <container-name> redis-cli del "workflow/modified"
Email and TLS
TLS errors
Nextflow and Seqera Platform can both interact with email providers on your behalf. These providers often require TLS connections, many now requiring at least TLSv1.2.
TLS connection errors can occur because of variability in the default TLS version specified by your JDK distribution. If you encounter any of the following errors, there is likely a mismatch between your default TLS version and what the email provider supports:
Unexpected error sending mail ... TLS 1.0 and 1.1 are not supported. Please upgrade/update your client to support TLS 1.2ERROR nextflow.script.WorkflowMetadata - Failed to invoke 'workflow.onComplete' event handler ... javax.net.ssl.SSLHandshakeException: No appropriate protocol (protocol is disabled or cipher suites are inappropriate)
To resolve:
-
Set a JDK environment variable to force Nextflow and Seqera containers to use TLSv1.2 by default:
export JAVA_OPTS="-Dmail.smtp.ssl.protocols=TLSv1.2" -
Add this parameter to your nextflow.config file:
mail {
smtp.ssl.protocols = 'TLSv1.2'
} -
Ensure these values are also set for Nextflow and Seqera:
mail.smtp.starttls.enable=truemail.smtp.starttls.required=true
Git integration
Get branches operation not supported by BitbucketServerRepositoryProvider provider
If you supplied the correct Bitbucket credentials and URL details in your tower.yml and still see this error, upgrade to at least v22.3.0. This version addresses SCM provider authentication issues and likely resolves the retrieval failure.
Cannot invoke "String.toCharArray()" because "password" is null
This error occurs when a GitLab credential has an Access token but no Password. When cloning the repository, Nextflow releases before 26.04.0 authenticate with the username and password only and ignore the access token.
To resolve, enter your token value in both the Password and Access token fields of your GitLab credential. Nextflow accepts the access token without a Password from 26.04.0 onward.
Healthcheck
Seqera Platform API healthcheck endpoint
To implement automated healthcheck functionality, use Seqera's service-info endpoint. For example:
curl -o /dev/null -s -w "%{http_code}\n" --connect-timeout 2 "https://api.cloud.seqera.io/service-info" -H "Accept: application/json"
200
Login
Login fails: screen frozen at /auth?success=true
From version 22.1, Seqera Enterprise implements stricter cookie security by default and only sends an auth cookie if the client is connected over HTTPS. Login attempts over HTTP fail by default.
To resolve, set the environment variable TOWER_ENABLE_UNSAFE_MODE=true to allow HTTP connectivity to Seqera (not recommended for production environments).
Restrict Seqera access to a set of email addresses
Removing the email section from the login page is not currently supported. You can, however, restrict which email identities can log in to your Seqera Enterprise instance with the trustedEmails configuration parameter in your tower.yml file:
# tower.yml
tower:
trustedEmails:
# Any email address pattern which matches will have automatic access.
- '*@seqera.io'
- 'named_user@example.com'
# Alternatively, specify a single entry to deny access to all other emails.
- 'fake_email_address_which_cannot_be_accessed@your_domain.org'
Users with email addresses outside the trustedEmails list undergo an approval process on the Profile > Admin > Users page. This is an effective backup method when SSO becomes unavailable.
- You must rebuild your containers (
docker compose down) to force Seqera to implement this change. Ensure your database is persistent before you issue the teardown command. See Docker Compose for more information. - All login attempts are visible to the root user at Profile > Admin panel > Users.
- Any user logged in before the restriction is not subject to the new restriction. An organization admin should remove users that previously logged in with an untrusted email from the Admin panel users list. This restarts the approval process before they can log in by email.
Login fails: admin approval required with Entra ID OIDC
The Entra ID app integrated with Seqera must have user consent settings configured to "Allow user consent for apps" so that admin approval is not required for each application login. See User consent settings.
Username and Password not accepted with Google SMTP
Seqera Enterprise email integration with Google SMTP can fail as of May 30, 2022, because of a security posture change by Google.
To re-establish email connectivity, follow these instructions to provision an app password. Update your TOWER_SMTP_PASSWORD environment variable with the app password, then restart the application.
Logging
Broken Nextflow log file in v22.3.1
A Seqera Launcher issue affects the Nextflow log file download in version 22.3.1. Version 22.3.2 fixes it. Update to version 22.3.2 or later.
Miscellaneous
Maximum parallel Seqera browser tabs
Because of a limitation in server-side event technology in HTTP/1.1, up to five tabs can be open simultaneously per browser product. Additional tabs remain stuck in a loading state.
Monitoring
Integrate third-party Java Application Performance Monitoring (APM) solutions
Mount the APM solution's JAR file in Seqera's backend container and set the agent JVM option through the JAVA_OPTS environment variable.
Retrieve the trace logs for a workflow run
You can't download the trace logs directly through Seqera, but you can configure your workflow to export the file to persistent storage:
-
Set this block in your
nextflow.config:trace {
enabled = true
} -
Add a copy command to your pipeline's Advanced options > Post-run script field:
aws s3 cp ./trace.txt s3://<bucket>/trace/trace.txt
Seqera Platform intermittently reports Live events sync offline
Seqera Platform uses server-sent events to push real-time updates to your browser. The client must connect to the server's /api/live endpoint to start the data stream, and this connection can occasionally fail because of factors like network latency.
To resolve, reload the Platform browser tab to re-establish the client's connection to the server. If reloading fails, contact Seqera support for help adjusting webserver timeout settings.
Networking
503 errors during pipeline execution
A 503 error indicates that one or more services that Seqera Enterprise contacts during workflow execution are unavailable. Database connectivity is a common cause.
To resolve, ensure all required services are running and available.
SocketTimeoutException: connect timed out with self-hosted Git servers
You might see connection timeout errors when launching workflows from a self-hosted Git server, such as Bitbucket or GitLab. If you configured the correct Git credentials in Seqera Enterprise, this error means the backend/cron container can't connect to the Git remote host, often because of a missing or incorrect proxy configuration.
Error log
ERROR i.s.t.c.GlobalErrorController - Unexpected error while processing - Error ID: 6h3HBUkaPe03vgzoDPc5HO
java.net.SocketTimeoutException: connect timed out
at java.base/java.net.PlainSocketImpl.socketConnect(Native Method)
at java.base/java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:399)
at java.base/java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:242)
at java.base/java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:224)
at java.base/java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
at java.base/java.net.Socket.connect(Socket.java:609)
at java.base/sun.security.ssl.SSLSocketImpl.connect(SSLSocketImpl.java:289)
at java.base/sun.net.NetworkClient.doConnect(NetworkClient.java:177)
at java.base/sun.net.www.http.HttpClient.openServer(HttpClient.java:474)
at java.base/sun.net.www.http.HttpClient.openServer(HttpClient.java:569)
at java.base/sun.net.www.protocol.https.HttpsClient.<init>(HttpsClient.java:265)
at java.base/sun.net.www.protocol.https.HttpsClient.New(HttpsClient.java:372)
at java.base/sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.getNewHttpClient(AbstractDelegateHttpsURLConnection.java:203)
at java.base/sun.net.www.protocol.http.HttpURLConnection.plainConnect0(HttpURLConnection.java:1187)
at java.base/sun.net.www.protocol.http.HttpURLConnection.plainConnect(HttpURLConnection.java:1081)
at java.base/sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(AbstractDelegateHttpsURLConnection.java:189)
at java.base/sun.net.www.protocol.http.HttpURLConnection.getInputStream0(HttpURLConnection.java:1592)
at java.base/sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1520)
at java.base/java.net.HttpURLConnection.getResponseCode(HttpURLConnection.java:527)
at java.base/sun.net.www.protocol.https.HttpsURLConnectionImpl.getResponseCode(HttpsURLConnectionImpl.java:334)
at nextflow.scm.RepositoryProvider.checkResponse(RepositoryProvider.groovy:167)
at nextflow.scm.RepositoryProvider.invoke(RepositoryProvider.groovy:136)
at nextflow.scm.RepositoryProvider.memoizedMethodPriv$invokeAndParseResponseString(RepositoryProvider.groovy:218)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:566)
at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:107)
at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:323)
at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1259)
at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1026)
at org.codehaus.groovy.runtime.InvokerHelper.invokePogoMethod(InvokerHelper.java:1029)
at org.codehaus.groovy.runtime.InvokerHelper.invokeMethod(InvokerHelper.java:1012)
at org.codehaus.groovy.runtime.InvokerHelper.invokeMethodSafe(InvokerHelper.java:101)
at nextflow.scm.RepositoryProvider$_closure2.doCall(RepositoryProvider.groovy)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:566)
at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:107)
at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:323)
at org.codehaus.groovy.runtime.metaclass.ClosureMetaClass.invokeMethod(ClosureMetaClass.java:263)
at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1026)
at groovy.lang.Closure.call(Closure.java:412)
at org.codehaus.groovy.runtime.memoize.Memoize$MemoizeFunction.lambda$call$0(Memoize.java:137)
at org.codehaus.groovy.runtime.memoize.ConcurrentCommonCache.getAndPut(ConcurrentCommonCache.java:137)
at org.codehaus.groovy.runtime.memoize.ConcurrentCommonCache.getAndPut(ConcurrentCommonCache.java:113)
at org.codehaus.groovy.runtime.memoize.Memoize$MemoizeFunction.call(Memoize.java:136)
at groovy.lang.Closure.call(Closure.java:428)
at nextflow.scm.RepositoryProvider.invokeAndParseResponse(RepositoryProvider.groovy)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:566)
at org.codehaus.groovy.runtime.callsite.PlainObjectMetaMethodSite.doInvoke(PlainObjectMetaMethodSite.java:43)
at org.codehaus.groovy.runtime.callsite.PogoMetaMethodSite$PogoCachedMethodSiteNoUnwrapNoCoerce.invoke(PogoMetaMethodSite.java:193)
at org.codehaus.groovy.runtime.callsite.PogoMetaMethodSite.callCurrent(PogoMetaMethodSite.java:61)
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:185)
at nextflow.scm.BitbucketRepositoryProvider.getCloneUrl(BitbucketRepositoryProvider.groovy:114)
at nextflow.scm.AssetManager.memoizedMethodPriv$getGitRepositoryUrl(AssetManager.groovy:394)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:566)
at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:107)
at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:323)
at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1259)
at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1026)
at org.codehaus.groovy.runtime.InvokerHelper.invokePogoMethod(InvokerHelper.java:1029)
at org.codehaus.groovy.runtime.InvokerHelper.invokeMethod(InvokerHelper.java:1012)
at org.codehaus.groovy.runtime.InvokerHelper.invokeMethodSafe(InvokerHelper.java:101)
at nextflow.scm.AssetManager$_closure1.doCall(AssetManager.groovy)
at nextflow.scm.AssetManager$_closure1.doCall(AssetManager.groovy)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:566)
at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:107)
at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:323)
at org.codehaus.groovy.runtime.metaclass.ClosureMetaClass.invokeMethod(ClosureMetaClass.java:263)
at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1026)
at groovy.lang.Closure.call(Closure.java:412)
at org.codehaus.groovy.runtime.memoize.Memoize$MemoizeFunction.lambda$call$0(Memoize.java:137)
at org.codehaus.groovy.runtime.memoize.ConcurrentCommonCache.getAndPut(ConcurrentCommonCache.java:137)
at org.codehaus.groovy.runtime.memoize.ConcurrentCommonCache.getAndPut(ConcurrentCommonCache.java:113)
at org.codehaus.groovy.runtime.memoize.Memoize$MemoizeFunction.call(Memoize.java:136)
at groovy.lang.Closure.call(Closure.java:406)
at nextflow.scm.AssetManager.getGitRepositoryUrl(AssetManager.groovy)
To resolve, update the HTTP proxy configuration in the backend and cron environment with your proxy details:
export http_proxy="http://<proxy-server>:<port>"
export https_proxy="https://<proxy-server>:<port>"
Optimization
OutOfMemoryError: Container killed due to memory usage
Nextflow can underestimate the memory allocation for containerized tasks. As a workaround, add a retry error strategy to the failing process that increases the allocated memory on each retry:
process {
errorStrategy = 'retry'
maxRetries = 3
memory = { 1.GB * task.attempt }
}
Plugins
Use the Nextflow SQL DB plugin to query AWS Athena
From Nextflow 22.05.0-edge, your Nextflow pipelines can query data from AWS Athena. Add these items to your nextflow.config. Secrets are optional:
plugins {
id 'nf-sqldb@0.4.0'
}
sql {
db {
'athena' {
url = 'jdbc:awsathena://AwsRegion=<region>;S3OutputLocation=s3://<s3-bucket>'
user = secrets.ATHENA_USER
password = secrets.ATHENA_PASSWORD
}
}
}
Then call the functionality in your workflow:
channel.sql.fromQuery("select * from test", db: "athena", emitColumns:true).view()
This example uses the legacy nf-sqldb@0.4.0 syntax. Newer plugin versions use an explicit include { fromQuery } from 'plugin/nf-sqldb' statement instead. See the nf-sqldb documentation.
See the nf-sqldb discussion for more information.
Repositories
Private Docker registry integration
Seqera-invoked jobs can pull container images from private Docker registries, such as JFrog Artifactory. The method depends on your computing platform.
For AWS Batch, modify your EC2 launch template using these AWS instructions.
This solution requires Docker Engine 17.07 or later to use --password-stdin.
You might need to add commands to your launch template, depending on your security posture:
cp /root/.docker/config.json /home/ec2-user/.docker/config.json && chmod 777 /home/ec2-user/.docker/config.json
For Azure Batch, create a Container registry-type credential in your Seqera workspace and associate it with the Azure Batch compute environment in the same workspace.
For Kubernetes, use an imagePullSecret, per #2827.
Remote resource not found
This error occurs when the Nextflow head job fails to retrieve the repository credentials from Seqera. If your Nextflow log contains an entry like DEBUG nextflow.scm.RepositoryProvider - Request [credentials -:-], check the protocol of your instance's TOWER_SERVER_URL value. It must be set to https rather than http, unless you use TOWER_ENABLE_UNSAFE_MODE to allow HTTP connections to Seqera in a test environment.
Secrets
Missing AWS execution role arn during launch
The ECS agent must have access to retrieve secrets from AWS Secrets Manager. Secrets-using pipelines launched in an AWS Batch compute environment encounter this error when an IAM execution role is not provided. See Secrets.
AWS Batch task failures with secrets
You might encounter errors when executing pipelines that use secrets on AWS Batch:
- If you use
nf-sqldbversion 0.4.1 or earlier and have secrets in yournextflow.config, you might seenextflow.secret.MissingSecretException: Unknown config secreterrors in your Nextflow log.
To resolve, explicitly define the xpack-amzn plugin in your configuration:
plugins {
id 'xpack-amzn'
id 'nf-sqldb'
}
-
If you have two or more processes that use the same container image but only some of them use secrets, your secret-using processes might fail during the initial run and then succeed when resumed. This is caused by a bug in how Nextflow (22.07.1-edge and earlier) registers jobs with AWS Batch.
To resolve, upgrade Nextflow to version 22.08.0-edge or later. If you can't upgrade, use one of these workarounds:
- Use a different container image for each process.
- Define the same set of secrets in each process that uses the same container image.
Tower Agent
Unexpected Exception in WebSocket … Operation timed out
Tower Agent reconnection logic was improved in version 0.5.0. Update your Tower Agent before relaunching your pipeline.
Reattach to a running agent
When you SSH back to the login node, attach to the agent session at any time:
tmux attach -t tower-agent
You can see the current log output. Detach again with Ctrl-b, then d, to leave the agent running.
Agent process stopped
If tmux ls shows no sessions, or attaching reveals the agent has exited, restart it as in Tower Agent setup. Common causes are a login node reboot, a process killed for exceeding login-node resource limits, or a revoked access token.
Agent shows as disconnected in Seqera Platform
If Seqera Platform shows the agent as disconnected while it's running on the cluster, verify that the Agent Connection ID in your workspace credential exactly matches the argument you passed to tw-agent.
Timeout waiting for command response when adding a pipeline
Before version 26.2, adding a pipeline to an agent-backed compute environment could fail intermittently with this error, even when the agent was running and connected:
ERROR: Timeout waiting for command response - Check Tower Agent is running and connected
The failure was more likely for file:// pipeline repositories, pipelines with several includeConfig statements, and concurrent adds. The agent answered every command, but Seqera Platform dropped some responses before they reached the request. You don't need to investigate the agent. Raising tower.agent.execution-timeout doesn't help.
Version 26.2 fixes the issue. On earlier versions, retry the failed add. Because the failure isn't deterministic, a retry usually succeeds.
Authentication errors on agent startup
Personal access tokens can be revoked or expire. If the agent logs authentication errors, generate a new token in Seqera Platform and restart the agent with the updated TOWER_ACCESS_TOKEN value.
Permission denied on the work directory
The agent needs read and write access to the work directory. If launches fail with permission errors, confirm that the directory exists and is owned by the user running the agent:
mkdir -p ~/work
Enable trace logging
To diagnose connection or execution issues in detail, enable trace-level logging:
export TOWER_ACCESS_TOKEN=<YOUR TOKEN>
export LOGGER_LEVELS_IO_SEQERA_TOWER_AGENT=TRACE
./tw-agent <YOUR CONNECTION ID>
Trace logging shows WebSocket connection details, message exchanges, reconnection attempts, command execution details and exit codes, and full stack traces for errors.
Google
Spot VM preemption causes task interruptions
Spot VMs reduce cost but increase the likelihood that a task is interrupted before completion. When Google Cloud reclaims a Spot VM, Google Cloud Batch terminates the task with exit code 50001. Add a retry strategy to your Nextflow configuration so that Nextflow automatically re-executes interrupted tasks. See Spot Instances in the Nextflow documentation. For example:
process {
errorStrategy = { task.exitStatus == 50001 ? 'retry' : 'finish' }
maxRetries = 5
}
Seqera service account permissions for Google Cloud Batch
Grant the following roles to the custom service account that submits Batch jobs:
- Batch Agent Reporter (
roles/batch.agentReporter) - Batch Job Editor (
roles/batch.jobsEditor) - Logs Writer (
roles/logging.logWriter) - Logs Viewer (
roles/logging.logViewer) - Service Account User (
roles/iam.serviceAccountUser) - Storage Admin (
roles/storage.admin), or bucket-level Storage access
For detailed setup instructions, see Service account permissions.
Kubernetes
Invalid value: "xxx": must be less or equal to memory limit
This error can occur when you specify a value in the Head Job memory field while creating a Kubernetes-type compute environment.
If you receive an error that includes field: spec.containers[x].resources.requests and message: Invalid value: "xxx": must be less than or equal to memory limit, your Kubernetes cluster might be configured with system resource limits that deny the Nextflow head job's resource request. To isolate the component causing the problem, launch a pod directly on your cluster through your Kubernetes administration solution. For example:
---
apiVersion: v1
kind: Pod
metadata:
name: debug
labels:
app: debug
spec:
containers:
- name: debug
image: busybox
command: ["sh", "-c", "sleep 10"]
resources:
requests:
memory: "xxxMi" # or "xxxGi"
restartPolicy: Never
On-premises HPC
java: command not found
When submitting jobs to your on-premises HPC (using either SSH or Tower Agent authentication), the following error might appear in your Nextflow logs, even with Java on your PATH environment variable:
java: command not found
Nextflow is trying to use the Java VM defined for the following environment variables:
JAVA_CMD: java
NXF_OPTS:
Possible causes:
- The queue where the Nextflow head job runs is in a different environment or node than your login node userspace.
- If your HPC cluster uses modules, the Java module might not be loaded by default.
To troubleshoot:
- Open an interactive session with the head job queue.
- Launch the Nextflow job from the interactive session.
- If your cluster uses modules, add
module load <java-module>in the Advanced options > Pre-run script field when creating your HPC compute environment in Seqera. - If your cluster doesn't use modules, source an environment with Java and Nextflow in the Advanced options > Pre-run script field when creating your HPC compute environment in Seqera.
Pipeline submissions to HPC clusters fail for some users
Nextflow launcher scripts fail if processed by a non-Bash shell, such as zsh or tcsh. You can identify this problem from these error entries:
- Your
.nextflow.logcontains an error likeInvalid workflow status - expected: SUBMITTED; current: FAILED. - Your Seqera Error report tab contains an error like:
Slurm job submission failed
- command: mkdir -p /home//\<username\>//scratch; cd /home//\<username\>//scratch; echo <long-base64-string> | base64 -d > nf-<run-id>.launcher.sh; sbatch ./nf-<run-id>.launcher.sh
- exit : 1
- message: Submitted batch job <#>
Connect to the head node over SSH and run ps -p $$ to verify your default shell. If you see an entry other than Bash, fix it as follows:
- Check which shells are available:
cat /etc/shells - Change your shell:
chsh -s /usr/bin/bash(the path to the binary might differ, depending on your HPC configuration). - If submissions continue to fail after the shell change, ask your Seqera Platform admin to restart the backend and cron containers, then submit again.
Execution logs don't update in real time for HPC compute environments
While a task runs on an HPC compute environment (such as Slurm, Grid Engine, LSF, or PBS Pro), the Execution log tab on the run details page does not refresh automatically.
This is expected behavior. Real-time log streaming is supported only for compute environments that stream logs from a cloud logging service: AWS Batch, Azure Batch, Google Cloud Batch, Kubernetes, and the AWS Cloud and Azure Cloud environments. For HPC compute environments, Seqera Platform retrieves the task log from the task work directory (the task's .command.log file) instead of streaming it.
To load the latest log content, change tabs or refresh the page.
Other run details, such as run status, task counters, and metrics, update in real time regardless of the compute environment type.