Report this

What is the reason for this report?

Trying to change WorkingDirectory of Systemd Service Unit

Posted on February 16, 2017

I make a simple shell script that opens gnome-text-editor named lauchscript.sh, in directory /home/pi/:

! /bin/sh
gnome-text-editor

And changed service file to:

#!/bin/sh -
[Unit]
Description=ATF Grafic Console

[Service]

WorkingDirectory=/home/pi
ExecStart=launchscript.sh

#ExecStart=-/RaspberryPi/ConsolaGrafica
Restart=always

#StandardOutput=syslogConsola               # Output to syslog
#StandardError=syslogConsola                # Output to syslog

[Install]
WantedBy=multi-user.target

Again I try run this service, and report the same error… ExecStart= needs to have full path, but in my app i need to run in other path like this example…



This textbox defaults to using Markdown to format your answer.

You can type !ref in this text area to quickly search our full set of tutorials, documentation & marketplace offerings and insert the link!

These answers are provided by our Community. If you find them useful, show some love by clicking the heart. If you run into issues leave a comment, or add your own answer to help others.

Thank you @kamaln7 and @rubengr

ExecStart requires an absolute path, so you will have to replace it with:

WorkingDirectory=/home/pi
ExecStart=/home/pi/launchscript.sh

To correctly change the working directory of a systemd service unit and ensure the ExecStart directive works as intended, you need to follow these steps:

  1. Specify the full path for ExecStart: Systemd requires that the ExecStart directive contains the full path to the executable.

  2. Ensure the script is executable: Make sure your script has the appropriate permissions.

Here’s how you can modify your service unit file:

  1. Modify the launchscript.sh:

    • Ensure it has the correct shebang line.
    • Make it executable.
#!/bin/sh
gnome-text-editor

Make it executable:

chmod +x /home/pi/launchscript.sh
  1. Update the service unit file:
  • Provide the full path for ExecStart.
  • Optionally, ensure that the working directory is correctly set.

Example service unit file (/etc/systemd/system/your_service_name.service):

[Unit]
Description=ATF Grafic Console

[Service]
WorkingDirectory=/home/pi
ExecStart=/home/pi/launchscript.sh
Restart=always

[Install]
WantedBy=multi-user.target
  1. Reload the systemd daemon: After creating or modifying the service file, you need to reload the systemd daemon to apply the changes.
sudo systemctl daemon-reload
  1. Start the service: Start and enable the service to ensure it runs on boot.\
sudo systemctl start your_service_name
sudo systemctl enable your_service_name

The developer cloud

Scale up as you grow — whether you're running one virtual machine or ten thousand.

Get started for free

Sign up and get $200 in credit for your first 60 days with DigitalOcean.*

*This promotional offer applies to new accounts only.