Skip to main content
bold is evil; syntax highlighting \o/
Source Link
HalosGhost
  • 4.9k
  • 10
  • 37
  • 42

###Question: Can I kick off a process with systemd and assign that process a working directory of my choosing?###

I have a service that I want to start with systemd. When that service is being started, I want to be able to assign it a current working directory. I know how to do this if I was using init, but I'm having trouble with systemd.

Here's what I've been trying to get working.

###My Service###

I created a simple utility ("listdir"), written in Python, and placed in /opt/bin/listdir:

#! /usr/bin/python

import os

print 'Current working directory: %s' % (os.getcwd())
#! /usr/bin/python

import os

print 'Current working directory: %s' % (os.getcwd())

###My Configuration File###

I then created a listdir.service file for systemd and placed it here: /lib/systemd/system/listdir.service:

[Unit]
Description=Test of listing CWD.

[Service]
ExecStartPre=chdir /usr/local
ExecStart=/opt/bin/listdir
StandardOutput=syslog
StandardError=syslog

[Install]
WantedBy=multi-user.target

###Problem###

When I run systemctl start listdir my system log records the root directory ("/") as the current working directory. Of course, I expected /usr/local as the current directory, since I thought ExecStartPre would change directories before starting the process.

Obviously, I'm imagining that systemd would work something like a shell script (even though I know it isn't a shell script). Can someone give me an idea of what I should be doing? Is it even possible to set a working directory using systemd? Thanks!


Edit:Edit: My system log is reporting an error. (I just noticed.)

Executable path is not absolute, ignoring: chdir /usr/local 

So, chdir is a shell command, and not an executable itself. Okay. But is there still some way for me to change directories using systemd?

###Question: Can I kick off a process with systemd and assign that process a working directory of my choosing?###

I have a service that I want to start with systemd. When that service is being started, I want to be able to assign it a current working directory. I know how to do this if I was using init, but I'm having trouble with systemd.

Here's what I've been trying to get working.

###My Service###

I created a simple utility ("listdir"), written in Python, and placed in /opt/bin/listdir:

#! /usr/bin/python

import os

print 'Current working directory: %s' % (os.getcwd())

###My Configuration File###

I then created a listdir.service file for systemd and placed it here: /lib/systemd/system/listdir.service:

[Unit]
Description=Test of listing CWD.

[Service]
ExecStartPre=chdir /usr/local
ExecStart=/opt/bin/listdir
StandardOutput=syslog
StandardError=syslog

[Install]
WantedBy=multi-user.target

###Problem###

When I run systemctl start listdir my system log records the root directory ("/") as the current working directory. Of course, I expected /usr/local as the current directory, since I thought ExecStartPre would change directories before starting the process.

Obviously, I'm imagining that systemd would work something like a shell script (even though I know it isn't a shell script). Can someone give me an idea of what I should be doing? Is it even possible to set a working directory using systemd? Thanks!


Edit: My system log is reporting an error. (I just noticed.)

Executable path is not absolute, ignoring: chdir /usr/local 

So, chdir is a shell command, and not an executable itself. Okay. But is there still some way for me to change directories using systemd?

###Question: Can I kick off a process with systemd and assign that process a working directory of my choosing?

I have a service that I want to start with systemd. When that service is being started, I want to be able to assign it a current working directory. I know how to do this if I was using init, but I'm having trouble with systemd.

Here's what I've been trying to get working.

###My Service###

I created a simple utility ("listdir"), written in Python, and placed in /opt/bin/listdir:

#! /usr/bin/python

import os

print 'Current working directory: %s' % (os.getcwd())

###My Configuration File###

I then created a listdir.service file for systemd and placed it here: /lib/systemd/system/listdir.service:

[Unit]
Description=Test of listing CWD.

[Service]
ExecStartPre=chdir /usr/local
ExecStart=/opt/bin/listdir
StandardOutput=syslog
StandardError=syslog

[Install]
WantedBy=multi-user.target

###Problem###

When I run systemctl start listdir my system log records the root directory ("/") as the current working directory. Of course, I expected /usr/local as the current directory, since I thought ExecStartPre would change directories before starting the process.

Obviously, I'm imagining that systemd would work something like a shell script (even though I know it isn't a shell script). Can someone give me an idea of what I should be doing? Is it even possible to set a working directory using systemd? Thanks!


Edit: My system log is reporting an error. (I just noticed.)

Executable path is not absolute, ignoring: chdir /usr/local 

So, chdir is a shell command, and not an executable itself. Okay. But is there still some way for me to change directories using systemd?

Added notes about error messages.
Source Link
Mario
  • 2k
  • 2
  • 14
  • 8

###Question: Can I kick off a process with systemd and assign that process a working directory of my choosing?###

I have a service that I want to start with systemd. When that service is being started, I want to be able to assign it a current working directory. I know how to do this if I was using init, but I'm having trouble with systemd.

Here's what I've been trying to get working.

###My Service###

I created a simple utility ("listdir"), written in Python, and placed in /opt/bin/listdir:

#! /usr/bin/python

import os

print 'Current working directory: %s' % (os.getcwd())

###My Configuration File###

I then created a listdir.service file for systemd and placed it here: /lib/systemd/system/listdir.service:

[Unit]
Description=Test of listing CWD.

[Service]
ExecStartPre=chdir /usr/local
ExecStart=/opt/bin/listdir
StandardOutput=syslog
StandardError=syslog

[Install]
WantedBy=multi-user.target

###Problem###

When I run systemctl start listdir my system log records the root directory ("/") as the current working directory. Of course, I expected /usr/local as the current directory, since I thought ExecStartPre would change directories before starting the process.

Obviously, I'm imagining that systemd would work something like a shell script (even though I know it isn't a shell script). Can someone give me an idea of what I should be doing? Is it even possible to set a working directory using systemd? Thanks!


Edit: My system log is reporting an error. (I just noticed.)

Executable path is not absolute, ignoring: chdir /usr/local 

So, chdir is a shell command, and not an executable itself. Okay. But is there still some way for me to change directories using systemd?

###Question: Can I kick off a process with systemd and assign that process a working directory of my choosing?###

I have a service that I want to start with systemd. When that service is being started, I want to be able to assign it a current working directory. I know how to do this if I was using init, but I'm having trouble with systemd.

Here's what I've been trying to get working.

###My Service###

I created a simple utility ("listdir"), written in Python, and placed in /opt/bin/listdir:

#! /usr/bin/python

import os

print 'Current working directory: %s' % (os.getcwd())

###My Configuration File###

I then created a listdir.service file for systemd and placed it here: /lib/systemd/system/listdir.service:

[Unit]
Description=Test of listing CWD.

[Service]
ExecStartPre=chdir /usr/local
ExecStart=/opt/bin/listdir
StandardOutput=syslog
StandardError=syslog

[Install]
WantedBy=multi-user.target

###Problem###

When I run systemctl start listdir my system log records the root directory ("/") as the current working directory. Of course, I expected /usr/local as the current directory, since I thought ExecStartPre would change directories before starting the process.

Obviously, I'm imagining that systemd would work something like a shell script (even though I know it isn't a shell script). Can someone give me an idea of what I should be doing? Is it even possible to set a working directory using systemd? Thanks!

###Question: Can I kick off a process with systemd and assign that process a working directory of my choosing?###

I have a service that I want to start with systemd. When that service is being started, I want to be able to assign it a current working directory. I know how to do this if I was using init, but I'm having trouble with systemd.

Here's what I've been trying to get working.

###My Service###

I created a simple utility ("listdir"), written in Python, and placed in /opt/bin/listdir:

#! /usr/bin/python

import os

print 'Current working directory: %s' % (os.getcwd())

###My Configuration File###

I then created a listdir.service file for systemd and placed it here: /lib/systemd/system/listdir.service:

[Unit]
Description=Test of listing CWD.

[Service]
ExecStartPre=chdir /usr/local
ExecStart=/opt/bin/listdir
StandardOutput=syslog
StandardError=syslog

[Install]
WantedBy=multi-user.target

###Problem###

When I run systemctl start listdir my system log records the root directory ("/") as the current working directory. Of course, I expected /usr/local as the current directory, since I thought ExecStartPre would change directories before starting the process.

Obviously, I'm imagining that systemd would work something like a shell script (even though I know it isn't a shell script). Can someone give me an idea of what I should be doing? Is it even possible to set a working directory using systemd? Thanks!


Edit: My system log is reporting an error. (I just noticed.)

Executable path is not absolute, ignoring: chdir /usr/local 

So, chdir is a shell command, and not an executable itself. Okay. But is there still some way for me to change directories using systemd?

Source Link
Mario
  • 2k
  • 2
  • 14
  • 8

Executing chdir before starting systemd service

###Question: Can I kick off a process with systemd and assign that process a working directory of my choosing?###

I have a service that I want to start with systemd. When that service is being started, I want to be able to assign it a current working directory. I know how to do this if I was using init, but I'm having trouble with systemd.

Here's what I've been trying to get working.

###My Service###

I created a simple utility ("listdir"), written in Python, and placed in /opt/bin/listdir:

#! /usr/bin/python

import os

print 'Current working directory: %s' % (os.getcwd())

###My Configuration File###

I then created a listdir.service file for systemd and placed it here: /lib/systemd/system/listdir.service:

[Unit]
Description=Test of listing CWD.

[Service]
ExecStartPre=chdir /usr/local
ExecStart=/opt/bin/listdir
StandardOutput=syslog
StandardError=syslog

[Install]
WantedBy=multi-user.target

###Problem###

When I run systemctl start listdir my system log records the root directory ("/") as the current working directory. Of course, I expected /usr/local as the current directory, since I thought ExecStartPre would change directories before starting the process.

Obviously, I'm imagining that systemd would work something like a shell script (even though I know it isn't a shell script). Can someone give me an idea of what I should be doing? Is it even possible to set a working directory using systemd? Thanks!