Я использовал этот ответ в качестве руководства, чтобы помочь мне написать сценарий запуска для 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
из командной строки вручную, и он прекрасно запускается, поэтому проблема, похоже, заключается в том, как я написал скрипт, но я не могу понять, почему он работает не так, как ожидалось. Любая помощь приветствуется.
Вместо того, чтобы помещать свой скрипт в /etc/systemd/system/jenkins.service
, поместите команду в ~/.bashrc, чтобы ваш скрипт запускался автоматически при каждой загрузке в Ubuntu ( это будет та же самая команда, которую вы использовали для запуска скрипта из терминала). Это файл bash, который запускается всякий раз, когда ваш компьютер загружается в Ubuntu.
Например, если я хочу, чтобы файл /home/Kanishk/Pictures/Delhi.png запускался при каждом запуске Ubuntu, я помещу команду shotwell /home/Kanishk/Pictures/Delhi.png
в конец файла ~/.bashrc, чтобы Shotwell открыл мое изображение.
Если вы предпочитаете запускать пакет Jetkins вместо этого скрипта, введите команду для его запуска вместо скрипта.
Я ответил на аналогичный вопрос здесь для другого дистрибутива 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, будет запускать команду только при входе в систему одного пользователя, а не общесистемное решение.