Запустить команду при запуске с Systemd

Я использовал этот ответ в качестве руководства, чтобы помочь мне написать сценарий запуска для systemd для запуска моего контейнера Jenkins, когда моя машина загружается. Однако скрипт не работает. Вот сценарий:

[Unit]
Description=Docker container that houses the Jenkins build service.
After=network-online.target

[Service]
Group=docker
ExecStart=/usr/bin/docker start jenkins
ExecStop=/usr/bin/docker stop jenkins

[Install]
WantedBy=multi-user.target

Я поместил его в /etc/systemd/system/jenkins.service.

Когда я бегу sudo systemctl start jenkins, ничего не происходит. Нет ошибок или чего-либо распечатанного, и контейнер не запускается (если я запускаю docker ps, нет контейнеров, перечисленных как запущенные).

Я могу запустить /usr/bin/docker start jenkins из командной строки вручную, и он прекрасно запускается, поэтому проблема, похоже, заключается в том, как я написал скрипт, но я не могу понять, почему он работает не так, как ожидалось. Любая помощь приветствуется.

0
задан 1 December 2017 в 01:01

2 ответа

Вместо того, чтобы помещать свой скрипт в /etc/systemd/system/jenkins.service, поместите команду в ~/.bashrc, чтобы ваш скрипт запускался автоматически при каждой загрузке в Ubuntu ( это будет та же самая команда, которую вы использовали для запуска скрипта из терминала). Это файл bash, который запускается всякий раз, когда ваш компьютер загружается в Ubuntu.

Например, если я хочу, чтобы файл /home/Kanishk/Pictures/Delhi.png запускался при каждом запуске Ubuntu, я помещу команду shotwell /home/Kanishk/Pictures/Delhi.png в конец файла ~/.bashrc, чтобы Shotwell открыл мое изображение.

Если вы предпочитаете запускать пакет Jetkins вместо этого скрипта, введите команду для его запуска вместо скрипта.

0
ответ дан 3 July 2020 в 16:03

Я ответил на аналогичный вопрос здесь для другого дистрибутива Linux. Решение работает с systemd, позволяя файлу /etc/rc.local запускать команды при запуске.

В сценарии этого дела есть некоторые детали, которые вы здесь не используете:

sudo vim /etc/systemd/system/rc-local.service

Тогда добавьте в него следующий контент.

[Unit]
Description=/etc/rc.local Compatibility
ConditionPathExists=/etc/rc.local

[Service]
Type=forking
ExecStart=/etc/rc.local start
TimeoutSec=0
StandardOutput=tty
RemainAfterExit=yes
SysVStartPriority=99

[Install]
 WantedBy=multi-user.target

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

[Manager]
LogLevel=info
LogTarget=syslog|console

Существует множество других параметров конфигурации systemd, которые вы можете использовать.

Очевидно, что решение, заключающееся в включении команды в файл ~/.bashrc, будет запускать команду только при входе в систему одного пользователя, а не общесистемное решение.

0
ответ дан 3 July 2020 в 16:55

Другие вопросы по тегам:

Похожие вопросы: