У меня есть следующий systemd сервис для запущения моего приложения фляги:
[Unit]
Description=My Flask server
After=network.target
[Service]
User=ubuntu
ExecStart=/home/ubuntu/my-server/script.py
WorkingDirectory=/home/ubuntu/my-server/
Restart=on-failure
RemainAfterExit=yes
[Install]
WantedBy=multi-user.target
Однако, когда я работаю
systemctl start my-server.service
Я получаю следующее состояние
my-server.service - My Flask server
Loaded: loaded (/etc/systemd/system/my-server.service; enabled; vendor preset: enabled)
Active: active (exited) (Result: exit-code) since Wed 2017-06-21 22:24:18 UTC; 8min ago
Main PID: 8407
(code=exited, status=203/EXEC)
Как я препятствую тому, чтобы сервер Фляги вышел? Когда я запускаю скрипт непосредственно с
/home/ubuntu/my-server/script.py
это хорошо работает. Но если я выполняю его с systemd, сервер сразу выходит.
Решенный моя собственная проблема. Я должен был изменить владельца файла, чтобы соответствовать systemd сценарию и затем сделать его исполняемым файлом:
chown ubuntu /home/ubuntu/my-server/script.py
chmod +x /home/ubuntu/my-server/script.py
Не уверенный, если это помогает, но , это является сервисным файлом, который я использую для управления приложением фляги для персонального проекта. Я думаю по умолчанию, systemd запустит скрипт с оболочкой/bin/sh без персонализации. Вы могли бы хотеть попытаться переключиться на оболочку/bin/sh и выполнить Вашу команду. Может быть отсутствие переменной среды.
файл Единицы из ссылки:
[Unit]
Description=Persistent Transactions API
After=syslog.target network.target electrum.service
[Service]
User=percy
Group=percy
ExecStart=/bin/bash -c "source /opt/persist_transaction/bin/activate ; /opt/persist_transaction/api.py -c /opt/persist_transaction/config.ini"
Restart=always
[Install]
WantedBy=multi-user.target