LINUX.ORG.RU
решено ФорумAdmin

unit для шелл скрипта

 ,


0

1

Доброго времени суток.


CentOS Linux release 7.5.1804 (Core)
Мне нужно сделать unit для одного скрипта (VMware vRealize EPOps agent). Сам скрипт выглядит так https://pastebin.com/WTudtW5V Сервис агента запускается так: /tmp/epops-agent-6.6.1/bin/ep-agent.sh start. Ок, создал файл startupx с таким содержанием:

[root@linagent2 ~]# cat /tmp/epops-agent-6.6.1/startupx
#!/bin/bash
/tmp/epops-agent-6.6.1/bin/ep-agent.sh start
Сделал его исполняемым, создал юнит:
[root@linagent2 ~]# cat /etc/systemd/system/epops-agent.service
[Unit]
Description=Start epops-agent
After=network.target

[Service]
Type=forking
ExecStart=/tmp/epops-agent-6.6.1/startupx
TimeoutStartSec=0

[Install]
WantedBy=default.target
[root@linagent2 ~]#
Далее systemctl daemon-reload, далее systemctl enable epops-agent.service. Сервис запускается. Пытаюсь запускать его от имени пользователя (User=epopsagent в секции [Serivce]) и получаю:
[root@linagent2 ~]# systemctl status epops-agent
● epops-agent.service - Start epops-agent
   Loaded: loaded (/etc/systemd/system/epops-agent.service; enabled; vendor preset: disabled)
   Active: failed (Result: exit-code) since Mon 2018-09-10 10:31:06 MSK; 7s ago
  Process: 2020 ExecStart=/tmp/epops-agent-6.6.1/startupx (code=exited, status=217/USER)
 Main PID: 1879 (code=exited, status=0/SUCCESS)

Sep 10 10:31:06 linagent2 systemd[1]: Starting Start epops-agent...
Sep 10 10:31:06 linagent2 systemd[1]: epops-agent.service: control process exited, code=exited status=217
Sep 10 10:31:06 linagent2 systemd[1]: Failed to start Start epops-agent.
Sep 10 10:31:06 linagent2 systemd[1]: Unit epops-agent.service entered failed state.
Sep 10 10:31:06 linagent2 systemd[1]: epops-agent.service failed.
Изначально вытставил для пользователя шелл /sbin/false, но не подумал про то, как он будет выполнять startupx, теперь задал шелл bash, но проблема не устранилась.

Разрешений для исполнения скрипта достаточно:

[root@linagent2 ~]# ls -l /tmp/ | grep epop
drwxr-xr-x  8 root root       183 Sep 10 07:54 epops-agent-6.6.1
[root@linagent2 ~]# ls -l /tmp/epops-agent-6.6.1/ | grep sta
-rwxr-xr-x 1 root root     57 Sep 10 07:55 startupx
[root@linagent2 ~]#
[root@linagent2 ~]# cat /etc/passwd | grep epo
epopsuser:x:1001:100::/home/epopsuser:/bin/bash
[root@linagent2 ~]#

Подскажете что-нибудь?

Необязательно делать отдельный скрипт startupx, можно просто прописать команду в ExecStart:

ExecStart=/tmp/epops-agent-6.6.1/bin/ep-agent.sh start

Ну и смотри в agent.operations.log, что там пишет.

spijet ★★★ ()
Последнее исправление: spijet (всего исправлений: 2)

Пытаюсь запускать его от имени пользователя (User=epopsagent в секции [Serivce]) и получаю

  Process: 2020 ExecStart=/tmp/epops-agent-6.6.1/startupx (code=exited, status=217/USER)

systemd.exec(5):

217	EXIT_USER	Failed to determine or change user credentials, or to set up user namespacing. See User=/PrivateUsers= above.

У тебя юзер кривой. Дальше сам.

Изначально вытставил для пользователя шелл /sbin/false, но не подумал про то, как он будет выполнять startupx

Это абсолютно не важно — за то, каким интерпретатором будет выполняться скрипт, отвечает шебанг в начале скрипта, а не login shell юзера.

intelfx ★★★★★ ()
Последнее исправление: intelfx (всего исправлений: 2)

Ну и да:

Пытаюсь запускать его от имени пользователя (User=epopsagent в секции [Serivce])

epopsuser:x:1001:100::/home/epopsuser:/bin/bash

intelfx ★★★★★ ()
Ответ на: комментарий от spijet

В agent.operations.log пишутся только те события, которые касаются успешного запуска. Ну не шутка ли? А вот

ExecStart=/tmp/epops-agent-6.6.1/bin/ep-agent.sh start
реально помог, я в статусе получил сообщения о том, что epopsuser не имеет прав на запись в файлы логов агента. Изменил владельца каталога агента на epopsuser (что, полагаю, логично) и все поехало. Спасибо.

nokogerra ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.