Как запустить git-daemon при загрузке?

Я создал сценарии для управления запуском, остановкой и т.д. моего git-daemon в 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
задан 19 May 2018 в 05:38
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.

]
5
ответ дан 3 December 2019 в 17:02

Теги

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