Inian
Inian

Reputation: 85865

Running a Python script via systemd

I am pretty new to writing systemd service scripts. I was following this useful page to write my own. It is failing as below.

The prodKPI.service contents in /etc/systemd/system/ in a Centos 7 machine are as

[Unit]
Description=prodKPI: Aggregation logic to compute device availability

[Service]
Type=simple
PermissionsStartOnly=true
User=deployuser
ExecStart = /usr/bin/python /tmp/app1/folder1/file1.py; /usr/bin/python /tmp/folder2/file2.py
Restart=always

[Install]
WantedBy=default.target

The steps I followed after creating the file are

systemctl daemon-reload
systemctl enable prodKPI.service

did a reboot and

# systemctl status prodKPI.service
● prodKPI.service - prodKPI: Aggregation logic to compute device availability
   Loaded: loaded (/etc/systemd/system/prodKPI.service; enabled; vendor preset: disabled)
   Active: failed (Result: start-limit) since Fri 2017-07-21 19:20:41 UTC; 15min ago
  Process: 1190 ExecStart=/usr/bin/python /tmp/app1/folder1/file1.py; /usr/bin/python /tmp/folder2/file2.py (code=exited, status=2)
 Main PID: 1190 (code=exited, status=2)

Jul 21 19:20:41 device-1 systemd[1]: prodKPI.service: main process exited, code=exited, status=2/INVALIDARGUMENT
Jul 21 19:20:41 device-1 systemd[1]: Unit prodKPI.service entered failed state.
Jul 21 19:20:41 device-1 systemd[1]: prodKPI.service failed.
Jul 21 19:20:41 device-1 systemd[1]: prodKPI.service holdoff time over, scheduling restart.
Jul 21 19:20:41 device-1 systemd[1]: start request repeated too quickly for prodKPI.service
Jul 21 19:20:41 device-1 systemd[1]: Failed to start prodKPI.service: Aggregation logic to compute device availability.
Jul 21 19:20:41 device-1 systemd[1]: Unit prodKPI.service entered failed state.
Jul 21 19:20:41 device-1 systemd[1]: prodKPI.service failed.

which did not help much, from

journalctl -xe

-- Unit prodKPI.service has finished starting up.
-- 
-- The start-up result is done.
Jul 21 19:20:41 device-1 systemd[1]: Starting prodKPI.service: Aggregation logic to compute device availability...
-- Subject: Unit prodKPI.service has begun start-up
-- Defined-By: systemd
-- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel
-- 
-- Unit prodKPI.service has begun starting up.
Jul 21 19:20:41 device-1 python[1190]: /usr/bin/python: can't open file '/tmp/app1/folder1/file1.py;': [Errno 2] No such file or directory
Jul 21 19:20:41 device-1 systemd[1]: prodKPI.service: main process exited, code=exited, status=2/INVALIDARGUMENT
Jul 21 19:20:41 device-1 systemd[1]: Unit prodKPI.service entered failed state.
Jul 21 19:20:41 device-1 systemd[1]: prodKPI.service failed.
Jul 21 19:20:41 device-1 systemd[1]: prodKPI.service holdoff time over, scheduling restart.
Jul 21 19:20:41 device-1: start request repeated too quickly for prodKPI.service
Jul 21 19:20:41 device-1: Failed to start prodKPI.service: Aggregation logic to compute device availability.

The error line below indicates some kind of permission issues? Should the service unit be run with a different user (or) access levels? I changed the both the python files to be executable also

Jul 21 19:20:41 device-1 python[1190]: /usr/bin/python: can't open file '/tmp/app1/folder1/file1.py;': [Errno 2] No such file or directory

Upvotes: 0

Views: 4549

Answers (1)

Jürgen Hötzel
Jürgen Hötzel

Reputation: 19757

When Type is not oneshot you can only provide one command.

Also you are using bash syntax in your command. You have to wrap it in an intermediate Shell Process if you wan't to use bash syntax. I.e.:

ExecStart=/usr/bin/bash -c "python /tmp/app1/folder1/file1.py; /usr/bin/python /tmp/folder2/file2.py"

Upvotes: 4

Related Questions