Спасибо, что нашли время, чтобы прочитать этот вопрос. У меня проблемы с запуском скриптов в Rundeck. Имея следующий пример: #! / Bin / bash SERVICE = $ (whereis -b service | awk '{print $ 2}') MDBC = "/ ...

0
barra51 14 Янв 2021 в 22:55

1 ответ

Лучший ответ

При тестировании вашего сценария выясняется, что строка ps axu | grep mongodb | grep -v grep | wc -l - не лучший способ проверить, запущен ли процесс, например, выполнение одной строки работает как чудо, но вызывается из шага сценария rundeck, другой процесс ( bash) с именем mongodb создается и ссылается на него следующим образом (генерирует две строки и всегда закрывается):

user      112156  0.0  0.0   2596   752 pts/1    S+   18:09   0:00 sh myscript.sh
user      112166  0.1  0.2 754928 48196 pts/1    Sl+  18:09   0:00 /path/to/mongodb/binary

Возможно, лучший способ идентифицировать вашу службу для ее перезапуска - это что-то вроде (конечно, вы можете его улучшить):

#!/bin/bash

service docker status | grep 'active (running)' > /dev/null 2>&1

if [ $? != 0 ]
then
    echo "restarting docker"
    sudo service docker restart > /dev/null
    echo "docker restarted"
else
    echo "docker service is running"
fi

Выглядит так в определении задания Rundeck :

<joblist>
  <job>
    <defaultTab>nodes</defaultTab>
    <description></description>
    <executionEnabled>true</executionEnabled>
    <id>927d0085-c4f8-45c9-ba2c-01575b167c76</id>
    <loglevel>DEBUG</loglevel>
    <name>RestartService</name>
    <nodeFilterEditable>false</nodeFilterEditable>
    <plugins />
    <scheduleEnabled>true</scheduleEnabled>
    <sequence keepgoing='false' strategy='node-first'>
      <command>
        <fileExtension>.sh</fileExtension>
        <script><![CDATA[#!/bin/bash

service docker status | grep 'active (running)' > /dev/null 2>&1

if [ $? != 0 ]
then
    echo "restarting docker"
    sudo service docker restart > /dev/null
    echo "docker restarted"
else
    echo "docker service is running"
fi]]></script>
        <scriptargs />
        <scriptinterpreter>/bin/bash</scriptinterpreter>
      </command>
    </sequence>
    <uuid>927d0085-c4f8-45c9-ba2c-01575b167c76</uuid>
  </job>
</joblist>

Лучше, если выставить услугу как опцию:

<joblist>
  <job>
    <context>
      <options preserveOrder='true'>
        <option name='service' value='docker' />
      </options>
    </context>
    <defaultTab>nodes</defaultTab>
    <description></description>
    <executionEnabled>true</executionEnabled>
    <id>927d0085-c4f8-45c9-ba2c-01575b167c76</id>
    <loglevel>DEBUG</loglevel>
    <name>RestartService</name>
    <nodeFilterEditable>false</nodeFilterEditable>
    <plugins />
    <scheduleEnabled>true</scheduleEnabled>
    <sequence keepgoing='false' strategy='node-first'>
      <command>
        <fileExtension>.sh</fileExtension>
        <script><![CDATA[#!/bin/bash

service @option.service@ status | grep 'active (running)' > /dev/null 2>&1

if [ $? != 0 ]
then
    echo "restarting @option.service@"
    sudo service @option.service@ restart > /dev/null
    echo "@option.service@ restarted"
else
    echo "docker service is running"
fi]]></script>
        <scriptargs />
        <scriptinterpreter>/bin/bash</scriptinterpreter>
      </command>
    </sequence>
    <uuid>927d0085-c4f8-45c9-ba2c-01575b167c76</uuid>
  </job>
</joblist>

Обе вакансии проверены и работают, не стесняйтесь использовать или изменять их.

Конечно, для перезапуска процессов вам потребуется sudo повышение прав и это плагин будет полезен, если служба сосуществует с Rundeck на одном сервере (это исполнитель узла / копировщик файлов) или отметьте this, если речь идет о внешнем сервере.

0
MegaDrive68k 14 Янв 2021 в 22:12