Как запустить git-daemon при загрузке?
Я создал сценарии для управления запуском, остановкой и т. Д. Моего git-демона на Fedora28. Сейчас я пытаюсь связать эти сценарии со службой systemd, чтобы git-daemon был доступен после перезагрузки.
Основной сценарий (gitT)...
#!/bin/bash
case "$1" in
'start')
echo "Starting git-daemon"
/home/git/scripts/start.sh >> /home/git/gitT.log
;;
'stop')
echo "Stopping git-daemon"
/home/git/scripts/stop.sh >> /home/git/gitT.log
;;
'restart')
echo "Bouncing git-daemon"
/home/git/scripts/bounce.sh >> /home/git/gitT.log
;;
'status')
echo "Status of git-daemon"
/home/git/scripts/status.sh
;;
*)
echo "`basename $0`: usage: `basename $0` { stop | start | restart | status }"
;;
esac
Вторичные сценарии...
start.sh
#!/bin/bash
# --------------------------
echo "---------------------"
/usr/bin/git daemon --export-all --enable=receive-pack --verbose --pid-file=/home/git/git-daemon.pid --base-path=/home/git/repos >> /home/git/git-daemon.out 2>> /home/git/git-daemon.err &
echo "---------------------"
echo "STARTED at `date`"
stop.sh
#!/bin/bash
# --------------------------
echo "---------------------"
pkill -F /home/git/git-daemon.pid
echo "---------------------"
echo "STOPPED at `date`"
bounce.sh
#!/bin/bash
# --------------------------
echo "====================="
/home/git/scripts/stop.sh
echo "====================="
sleep 5
echo "====================="
/home/git/scripts/start.sh
echo "====================="
echo "BOUNCED"
и status.sh
#!/bin/bash
# --------------------------
echo "====================="
ps -x --forest
echo "====================="
Наконец я создал служебный файл (git-daemon.service)...
[Unit]
Description=Git Daemon
Documentation=man:git-daemon(1)
ConditionPathExists=/home/git/repos
[Service]
Type=oneshot
ExecStart=/bin/bash /home/git/gitT start
ExecStop=/bin/bash /home/git/gitT stop
RemainAfterExit=yes
User=git
Group=git
[Install]
WantedBy=multi-user.target
Затем я настроил это с помощью этих команд...
cp /home/git/git-daemon.service /etc/systemd/system
systemctl enable git-daemon.service
Теперь, если я бегу gitT start
как пользователь git, все начинается нормально. Но это я бегу systemctl start git-daemon
как root, это ошибка...
fatal: base-path '/home/git/repos' does not exist or is not a directory
1 ответ
Неустранимый: базовый путь /home/git/repos не существует или не является каталогом
это вызвано
ConditionPathExists=/home/git/repos
Поскольку он считает, что каталог не существует. Каков выход
ls -ld /home/git/repos
?
При запуске вручную процесс действительно запускается? или вы просто не получаете никаких ошибок при запуске вручную? Поскольку на уровне сценариев у вас есть фоновая обработка и перенаправление вывода, эти сценарии будут успешно выполняться независимо от того, сбоятся ли основные команды или нет. Вы должны проверить файлы журнала, которые вы создали.
Но почему у вас так много файлов для начала? Вы можете свести все это к одному служебному файлу с помощью:
[Unit]
Description=Git Daemon
Documentation=man:git-daemon(1)
ConditionPathExists=/home/git/repos
[Service]
ExecStart=/usr/bin/git daemon --export-all --enable=receive-pack --verbose --base-path=/home/git/repos
User=git
Group=git
[Install]
WantedBy=multi-user.target
Затем вы можете просмотреть все журналы с journalctl -xfu git-daemon
и не беспокойтесь о необходимости отслеживать PID-файл.