dac*_*cot 2 daemon git start-stop-daemon systemd
我已经创建了脚本来控制 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
Run Code Online (Sandbox Code Playgroud)
辅助脚本是...
启动文件
#!/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`"
Run Code Online (Sandbox Code Playgroud)
停止.sh
#!/bin/bash
# --------------------------
echo "---------------------"
pkill -F /home/git/git-daemon.pid
echo "---------------------"
echo "STOPPED at `date`"
Run Code Online (Sandbox Code Playgroud)
弹跳.sh
#!/bin/bash
# --------------------------
echo "====================="
/home/git/scripts/stop.sh
echo "====================="
sleep 5
echo "====================="
/home/git/scripts/start.sh
echo "====================="
echo "BOUNCED"
Run Code Online (Sandbox Code Playgroud)
和状态.sh
#!/bin/bash
# --------------------------
echo "====================="
ps -x --forest
echo "====================="
Run Code Online (Sandbox Code Playgroud)
最后我创建了一个服务文件(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
Run Code Online (Sandbox Code Playgroud)
然后我用这些命令设置它......
cp /home/git/git-daemon.service /etc/systemd/system
systemctl enable git-daemon.service
Run Code Online (Sandbox Code Playgroud)
现在,如果我gitT start
以 git 用户身份运行,则一切正常。但是我systemctl start git-daemon
以root身份运行,这是错误...
fatal: base-path '/home/git/repos' does not exist or is not a directory
Run Code Online (Sandbox Code Playgroud)
小智 6
致命:基本路径“/home/git/repos”不存在或不是目录
是由
ConditionPathExists=/home/git/repos
因为它认为该目录不存在。什么是输出
ls -ld /home/git/repos
Run Code Online (Sandbox Code Playgroud)
?
手动运行时,进程是否真正启动?或者您只是在手动运行时没有收到任何错误?由于您拥有后台和重定向输出的脚本级别,因此无论底层命令是否失败,它们的脚本都会成功运行。您应该检查您创建的日志文件。
但是为什么一开始就有这么多文件呢?您可以通过以下方式将这一切缩减为单个服务文件:
[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
Run Code Online (Sandbox Code Playgroud)
然后,您可以查看所有日志,journalctl -xfu git-daemon
而不必担心必须跟踪 PID 文件。
归档时间: |
|
查看次数: |
937 次 |
最近记录: |