如何在启动时启动 git-daemon?

如何在启动时启动 git-daemon?

我已经创建了脚本来控制 Fedora28 上 git-daemon 的启动、停止等。我现在正尝试将这些脚本链接到 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

次要脚本是...

启动脚本

#!/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`"

停止脚本

#!/bin/bash
# --------------------------
echo "---------------------"
pkill -F /home/git/git-daemon.pid
echo "---------------------"
echo "STOPPED at `date`"

反弹

#!/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 文件。

相关内容