首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在引导时启动git-守护进程?

如何在引导时启动git-守护进程?
EN

Server Fault用户
提问于 2018-05-19 02:38:23
回答 1查看 1.3K关注 0票数 2

我已经创建了脚本来控制Fedora28上git-守护进程的启动、停止等。我现在正在尝试将这些脚本链接到一个systemd服务,这样git-守护进程在重新启动后就可以使用了。

主脚本(gitT)是..。

代码语言:javascript
运行
复制
#!/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

代码语言:javascript
运行
复制
#!/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

代码语言:javascript
运行
复制
#!/bin/bash
# --------------------------
echo "---------------------"
pkill -F /home/git/git-daemon.pid
echo "---------------------"
echo "STOPPED at `date`"

bounce.sh

代码语言:javascript
运行
复制
#!/bin/bash
# --------------------------
echo "====================="
/home/git/scripts/stop.sh
echo "====================="
sleep 5
echo "====================="
/home/git/scripts/start.sh
echo "====================="
echo "BOUNCED"

和status.sh

代码语言:javascript
运行
复制
#!/bin/bash
# --------------------------
echo "====================="
ps -x --forest
echo "====================="

最后,我创建了一个服务文件(git-daemon.service).

代码语言:javascript
运行
复制
[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

然后我用这些命令设置它..。

代码语言:javascript
运行
复制
cp /home/git/git-daemon.service /etc/systemd/system
systemctl enable git-daemon.service

现在,如果我以git用户的身份运行gitT start,一切都会好起来。但是我把systemctl start git-daemon作为根运行,这是错误.

代码语言:javascript
运行
复制
fatal: base-path '/home/git/repos' does not exist or is not a directory
EN

回答 1

Server Fault用户

发布于 2018-05-19 09:10:53

致命: base-path '/home/git/repos‘不存在或不是目录

是由

ConditionPathExists=/home/git/repos

因为它认为目录不存在。的输出是什么?

代码语言:javascript
运行
复制
ls -ld /home/git/repos

当手动运行它时,流程实际启动了吗?或者您只是在手动运行它时没有得到任何错误?因为有了脚本级别,您就有了回退和重定向输出,因此无论底层命令是否失败,脚本都会成功运行。您应该检查您创建的日志文件。

但你为什么一开始就有这么多文件?您可以通过以下方法将所有这些简化为一个服务文件:

代码语言:javascript
运行
复制
[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文件。

票数 6
EN
页面原文内容由Server Fault提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://serverfault.com/questions/912899

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档