Halloween DealsAmazon USHalloween week deals: useful picks before month-endAmazon US: current deals, useful picks and tech finds.Check DealsPC HealthRecommendedCrashes, freezes, slowdowns? Check your PC nowSpot repairable issues before they interrupt work.Check PCHalloween DealsAmazon USOctober picks are moving - compare before checkoutAmazon US: current deals, useful picks and tech finds.See Picks×
VGSOURCES
Get listed

ExecStartPATCH 2026.10.15

Fix the systemd “Executable Path Is Not Absolute” Error

By VGSources Team 8 min read

What’s actually slowing this PC down?

Pick the symptom - the matching free tool is one click away.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

The warning means systemd cannot treat the first token in ExecStart= (or a related command directive) as a usable executable. Put a real executable at the start—preferably its full absolute path—then reload the manager and restart the unit. Variables, shell built-ins such as exec, and shell-style quoting copied into a unit file are common causes of the parser failure.

What the warning actually means

systemd parses a service command before it attempts to start the process. The first token in ExecStart= must identify the program systemd is supposed to execute. On older systemd behavior, that token had to be an absolute path. If parsing fails, systemd can discard the command and leave the unit without a usable ExecStart; the service then never reaches the application-level startup checks.

As an Amazon Associate I earn from qualifying purchases.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

One documented failure involved a quoted path containing a space:

ExecStart='/tmp/space bin'

The parser reported Executable path is not absolute, ignoring: '/tmp/space bin'. The quotes did not turn the whole line into a shell command. They made the first token a path that systemd still rejected, so the unit ended up without a valid start command.

A variable in the executable position has the same risk. For example, placing $CELERY_BIN first was recorded upstream as producing the warning. A variable is not a reliable executable token for this purpose; resolve the program to a path in the unit instead.

Inspect the unit systemd is really loading

Before editing anything, check the complete unit and every drop-in. A file in /etc/systemd/system may be overridden by a vendor unit, a generated file, or a drop-in directory.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
  1. Display the merged unit text, including drop-ins:

    systemctl cat example.service
  2. Show the source file and drop-in paths:

    systemctl show example.service -p FragmentPath -p DropInPaths
  3. Look for every ExecStart=, ExecStartPre=, ExecStartPost=, and ExecStop= line. The same executable-token rule can affect related command directives.

If the line you changed is not visible in systemctl cat, you edited the wrong file or a later drop-in is replacing it. Fix the file that is actually loaded, or remove the conflicting override.

Repair ExecStart= step by step

1. Find the installed executable

Resolve the command as the service manager should see it, rather than relying on the interactive shell used for administration.

command -v myapp
ls -l /usr/local/bin/myapp

command -v reports the path found in your current shell. Confirm the file exists and inspect its permissions with ls -l. If the command is installed somewhere else, use that actual location.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

2. Put the absolute path first

Use a real executable as the first token and place options after it:

[Service]
ExecStart=/usr/local/bin/myapp --config /etc/myapp/config.yml

Do not put an assignment, a shell expression, or a descriptive command string before /usr/local/bin/myapp. An explicit path is the clearest choice across systemd releases and does not depend on the manager’s search path.

3. Reload the manager after editing

Editing a unit file does not automatically change the manager’s in-memory definition.

systemctl daemon-reload

Then restart and inspect both the unit state and its boot journal:

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
systemctl restart example.service
systemctl status example.service --no-pager
journalctl -u example.service -b --no-pager

If the warning disappears but the service still fails, you have moved past the parser problem. Follow the execution checks later in this guide.

How to start scripts correctly

Call an interpreter explicitly

This is the most predictable form when the script is not executable or when you need to select an interpreter:

[Service]
ExecStart=/bin/bash /opt/myapp/start.sh

The first token is the absolute path to Bash. The script is an argument, so it must be readable by the service’s user; it does not need its executable bit for Bash to read it.

Execute the script directly

Direct execution is also valid when the script is executable and begins with a valid shebang:

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
[Service]
ExecStart=/opt/myapp/start.sh

Check both conditions: the file must have execute permission for the service user, and the shebang must name an interpreter that exists on the machine. A script that works in an interactive shell can still fail under systemd if its interpreter, configuration, or working directory is unavailable to the service account.

Direct script versus interpreter invocation

Choice Interpreter selection File requirements Process and signal behavior
Absolute script path Selected by the script’s shebang Executable bit, valid shebang, and service-user access The interpreter launched for the script becomes the service’s command process; child-process behavior still depends on the script
/bin/bash /path/script.sh Forced to the stated Bash path Script must be readable; executable bit is not required Bash is the command process, which can change how signals and child processes are handled compared with a program that replaces itself

Choose the explicit interpreter when the script’s shebang is missing, non-portable, or intentionally different from the host default. Choose direct execution when the shebang and permissions are part of the script’s contract and you want systemd to invoke that contract directly.

Why variables and shell built-ins fail in the executable position

Variables are not a substitute for the first executable token

This pattern is unsafe:

ExecStart=$MYAPP_BIN --config /etc/myapp/config.yml

The parser must identify the executable before a shell expands environment variables. Put the resolved absolute path in ExecStart= instead. Environment settings can still be supplied for the application, but they should not be relied on to name the executable itself.

exec, source, and export are shell built-ins

These are not standalone programs that systemd can execute as the first token:

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
ExecStart=exec /usr/local/bin/myapp
ExecStart=source /etc/myapp/env
ExecStart=export MODE=production

If the command genuinely needs shell grammar—such as conditional operators, pipelines, command substitution, or several shell assignments—invoke a shell by its absolute path and pass -c with the command as an argument:

ExecStart=/bin/bash -c 'command-that-needs-shell-syntax'

This changes quoting rules and process behavior. The shell becomes the process systemd starts, so signal forwarding, exit status, and child reaping need to be considered. Do not use a shell merely to launch an ordinary binary; a direct absolute path is simpler and less error-prone.

Paths containing spaces

Unit command lines use systemd’s own command-line parsing. They are not copied verbatim to an interactive shell. Shell quoting that looks familiar can therefore create a malformed executable token, including the documented '/tmp/space bin' warning.

Keep the executable token unambiguous and quote or escape a path with spaces as an argument according to systemd’s unit-file rules. For example, when Bash is the executable and the script path is the second argument:

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
ExecStart=/bin/bash "/opt/my app/start.sh"

Here the absolute executable is /bin/bash; the quoted path is only an argument. Do not put the entire command, including its executable, inside one shell-style quoted string. After saving the unit, run systemctl daemon-reload and inspect systemctl status to verify that the manager accepted the resulting command line.

When possible, installing software under a path without spaces avoids an extra layer of escaping. If relocating the file is not an option, use systemd’s documented quoting and escaping syntax rather than pasting a command copied from a shell script.

Independent reader supportYour contribution helps us test, update, and keep practical guides available for everyone.Support on Ko-Fi

Absolute path or simple filename?

Systemd’s behavior has changed over time. Older documentation required an absolute path. Later documentation permits a simple filename without slashes and resolves it through a fixed search path. An absolute path remains the most portable and auditable form.

Form Portability across versions PATH dependence Maintenance trade-off
ExecStart=/usr/local/bin/myapp Works with the older absolute-path requirement and newer releases None for locating the executable Must be updated if the program is moved
ExecStart=myapp Requires a systemd version that accepts a filename without slashes Resolved through the manager’s fixed search path Survives a move within that search path, but can become ambiguous or unavailable

Do not assume the PATH from your login shell applies to a system service. The documented system-manager PATH is /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin, which may differ from an interactive user’s PATH.

Free tools Windows power users keep installed

One-click scans. No signup required.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Systemd documents ExecSearchPath= as a colon-separated list of absolute directories used to locate executables; that setting was added in version 250. Because both the directive and filename resolution are version-sensitive, use a full path when a unit must be portable across distributions or releases.

When the parser accepts the line but startup still fails

Removing “Executable path is not absolute” only proves that systemd accepted the command syntax. The next failure may be unrelated. Check these conditions in order:

  • Target exists: verify the exact path with ls -l. A typo or a package removed during an upgrade produces a different failure.
  • Permission to execute or read: the service user needs execute permission on a binary or interpreter and read permission on a script and its supporting files.
  • Shebang and interpreter: for direct scripts, confirm that the shebang names an installed interpreter and that every directory in the path is traversable.
  • Configuration and working directory: relative paths that worked from a terminal may fail because the unit starts in a different directory. Use absolute configuration paths or set the unit’s working directory deliberately.
  • Environment: a service does not automatically inherit your login shell’s variables, aliases, functions, or PATH.
  • Sandbox and identity: restrictions, a non-root User=, read-only paths, or filesystem protections can block an otherwise valid executable.

Use the three views together: systemctl cat shows the command actually configured, systemctl status shows the immediate result, and journalctl -u example.service -b supplies the detailed error from this boot. The original parser warning cannot identify any of these host-specific execution conditions.

A practical troubleshooting decision path

  1. Warning appears while loading: inspect the merged unit and find the first token of each command directive. Replace variables, shell built-ins, quoted command strings, and relative paths with a real absolute executable path.
  2. The warning is gone but the unit has no command: run systemctl daemon-reload, then check systemctl cat again for a replacement or conflicting drop-in.
  3. The unit now starts and immediately exits: read the journal. Check script permissions, shebang, interpreter, configuration access, working directory, and service-user privileges.
  4. The command works in a terminal but not as a service: compare the manager’s fixed PATH and environment with the shell’s. Replace implicit lookups and relative paths with explicit values.
  5. A path contains spaces: ensure the absolute executable remains the first token and apply systemd’s own argument quoting or escaping to the later path. Reload and test rather than assuming shell syntax is equivalent.

Known-good patterns

Binary with options

[Service]
ExecStart=/usr/local/bin/myapp --config /etc/myapp/config.yml

Script with a selected interpreter

[Service]
ExecStart=/bin/bash /opt/myapp/start.sh

Executable script with a shebang

[Service]
ExecStart=/opt/myapp/start.sh

Shell syntax only when it is genuinely required

[Service]
ExecStart=/bin/bash -c 'command-that-needs-shell-syntax'

In every pattern, systemd can identify the first token without expanding a variable or interpreting a shell built-in. That is the essential condition for eliminating this specific warning.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Product prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on Amazon at the time of purchase will apply.

ExecStartLinuxservice managementsystemdtroubleshooting

Leave a reply

Your email address will not be published. Required fields are marked *

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Recommended PC Tool
Recommended PC Tool
PC Slower Than It Used to Be?Free scan - under a minute
Outdated Drivers Are Slowing You DownFree scan - exact matches

Two free Windows tools

One Free Minute Could Fix That PC

Before you go - each of these free tools takes about a minute and tackles what quietly slows a Windows PC down.

Special offer. View Outbyte info, uninstall instructions, EULA, and Privacy Policy.