LINUX.ORG.RU

Последовательность автозагрузки сервисов

 , , ,


0

1

К Azure VM смонтированы диски, на которых при загрузке системы должны создаться рабочие slave workspace folders для jenkins agent, для чего написан сервис ниже и скрипт, создающий эти каталоги. Код скрипта и сервиса работают безупречно при уже запущенной системе, но не работают, как должны при загрузке CentOS. Проблема наверняка в том, что сервис пытается создать нужные каталоги на подключаемом диске, когда он еще не смонтирован. Какой наиболее правильный способ для решения этой проблемы? p.s. Попытки поставить различные варианты сервисов в «After=» пока безуспешны. В интернет предлагаются решения с написанием своего сервиса, который делает sleep на какое-то время и делать запуск после него, но такой способ видится не оптимальным.

[Unit]
Description=Script for jenkins_agent folder after poweroff VM
After=network.target

[Service]
Type=simple
ExecStart=/usr/local/bin/jenkins-slave.sh
TimeoutStartSec=0

[Install]
WantedBy=default.target

и сам скрипт:

#!/bin/bash
#Script for jenkins_agent folder after poweroff VM
sudo mkdir /mnt/resource/jenkins_agent


Последнее исправление: unlimuser (всего исправлений: 4)

[Unit]
Description=Script for jenkins_agent folder after poweroff VM
After=network.target,local-fs.target
Conflicts=umount.target

[Service]
Type=simple
ExecStart=/bin/mkdir /mnt/resource/jenkins_agent
TimeoutStartSec=0

[Install]
WantedBy=default.target

И не надо никаких скриптов, sudo и прочего наркоманства.

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

Это jenkins slave node, где нет данного сервиса jenkins.service поэтому к сожалению это неприменимо. Также попытка добавления: Conflicts=umount.target не помогла p.s. After=network.target,local-fs.target было опробовано ранее и так же ничего не дало. Поделитесь пожал. еще идеями…

unlimuser
() автор топика
Ответ на: комментарий от mord0d

ExecStart=/bin/mkdir /mnt/resource/jenkins_agent Точно так же не создает папку при загрузке, но отлично отрабатывает при уже загруженной системе. Какие есть идеи?

unlimuser
() автор топика
Ответ на: комментарий от mord0d

Вообще, стоило бы добавить тег systemd, чтобы @intelfx пришёл. Уж он-то точно в теме. А я давно не тыкал в Linux и многое забыл.

mord0d ★★★★★
()

Что за дичь вы тут творите.

Диск монтируется через fstab? Если да, то сделай в секции [Unit] директиву RequiresMountsFor=/path/to/directory, где /path/to/directory — это путь до того каталога, который в конечном итоге нужен скрипту. Всё. Никаких ручных After=, Conflicts=, вспомогательных юнитов с mkdir (нахера???) и прочей ереси.

И на будущее прочитай man 5 systemd.unit и man 5 systemd.service. Можешь с конца, там примеры есть.

intelfx ★★★★★
()
Последнее исправление: intelfx (всего исправлений: 5)
Ответ на: комментарий от intelfx

Что за дичь вы тут творите.

Ну а что ты хотел? Я на FreeBSD уже давно свалил, всё моё давно крутится на ней, в самом печальном случае (в виртуалках) на Alpine с busybox вместо инита.

Забывал я стать systemd.

И документации под рукой нет.

mord0d ★★★★★
()
Последнее исправление: mord0d (всего исправлений: 1)
Ответ на: комментарий от eternal_sorrow

Верно. Я не заметил, что ТС вообще привёл свой скрипт.

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