Como iniciar o git-daemon na inicialização?

1

Eu criei scripts para controlar iniciar, parar, etc. do meu git-daemon no Fedora28. Agora estou tentando vincular esses scripts a um serviço systemd para que o git-daemon esteja disponível após a reinicialização.

O script principal (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

Scripts secundários são ...

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"

e status.sh

#!/bin/bash
# --------------------------
echo "====================="
ps -x --forest
echo "====================="

Finalmente eu criei um arquivo de serviço (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

Então eu configuro com esses comandos ...

cp /home/git/git-daemon.service /etc/systemd/system
systemctl enable git-daemon.service

Agora, se eu executar gitT start como o usuário git, tudo começa bem. Mas eu corro systemctl start git-daemon como root, esse é o erro ...

fatal: base-path '/home/git/repos' does not exist or is not a directory
    
por dacracot 19.05.2018 / 04:38

1 resposta

5

fatal: base-path '/home/git/repos' does not exist or is not a directory

é causado por

ConditionPathExists=/home/git/repos

Desde que pensa que o diretório não existe. Qual é a saída de

ls -ld /home/git/repos

?

Ao executá-lo manualmente, o processo realmente começa? ou você simplesmente não está recebendo nenhum erro quando você o executa manualmente? Já que com o nível de scripts você tem o background e redireciona a saída, os scripts serão executados com sucesso, não importando se os comandos subjacentes falharem ou não. Você deve verificar os arquivos de log que você criou.

Mas por que você tem tantos arquivos para começar? Você pode reduzir tudo isso para um único arquivo de serviço com:

[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

Depois, você pode ver todos os registros com journalctl -xfu git-daemon e não se preocupar em manter o controle do arquivo PID.

    
por 19.05.2018 / 11:10