Почему запуск сценария оболочки из службы Debian не ведет себя как командная строка? - PullRequest
0 голосов
/ 03 ноября 2019

У меня есть python-бот, который я запускаю в командной строке и запрашивает у меня логин для начала работы.

Чтобы пропустить этот шаг, я добавляю канал, чтобы напрямую вставить логин в команду, как показано ниже, иэто работает:

printf "login" | python_module-py

Теперь я хочу запланировать запуск бота, чтобы не запускать его самостоятельно, и чтобы бот не нуждался в моем компьютере.

Итак, я купилDebian VPS и попытался создать сервис systemd. Я положил команду в оболочке. Вот мой сервис: (при условии, что мой скрипт находится в / home / user и у меня есть все права rwx)

[Unit]
Description=Description
After=network.target

[Service]
Type=simple
User=user
Group=group
WorkingDirectory=/home/user
ExecStart=./script.sh

[Install]
WantedBy=multi-user.target

Я попытался запустить его, но не удалось из-за этой ошибки:

TypeError: unsupported operand type(s) for /: 'NoneType' and 'int'

Я почти уверен, что это потому, что логин не прошел через канал, и мне интересно, почему.

Пожалуйста, заранее простите меня за мой английский.

[ТАКЖЕИСПЫТАНО]

Сохраните команду в службе, используя /bin/sh -c, также выдавая ту же ошибку:

ExecStart=/bin/sh -c '/usr/bin/printf "login" | /usr/bin/python3.7 -m python_module'

1 Ответ

0 голосов
/ 04 ноября 2019

Канал не будет работать напрямую, например, в операторе ExecStart, вместо этого вы должны использовать что-то вроде ExecStart=/bin/sh -c 'printf "login" | python_module-py', чтобы позволить /bin/sh обрабатывать канал.

Вы также должны быть в состоянии передатьфайл в качестве стандартного ввода для вашего сервиса, установив StandardInput.

...