witersen
3 years ago
16 changed files with 842 additions and 151 deletions
@ -0,0 +1,330 @@
@@ -0,0 +1,330 @@
|
||||
<template> |
||||
<div> |
||||
<Card :bordered="false" :dis-hover="true" style="margin-bottom: 10px" v-if="display.part1"> |
||||
<p slot="title"> |
||||
<Icon type="md-bulb" /> |
||||
{{ systemBrif.os }} |
||||
</p> |
||||
<div> |
||||
<Row> |
||||
<Col span="4"> |
||||
<div class="statusTop">负载状态</div> |
||||
<Tooltip placement="bottom" max-width="200"> |
||||
<Circle |
||||
:percent="statusInfo.load.percent" |
||||
dashboard |
||||
:size="100" |
||||
:stroke-color="statusInfo.load.color" |
||||
class="statusCircle" |
||||
> |
||||
<span class="demo-circle-inner" style="font-size: 24px" |
||||
>{{ statusInfo.load.percent }}%</span |
||||
> |
||||
</Circle> |
||||
<div slot="content"> |
||||
<p>最近1分钟平均负载:{{ statusInfo.load.cpuLoad1Min }}</p> |
||||
<p>最近5分钟平均负载:{{ statusInfo.load.cpuLoad5Min }}</p> |
||||
<p>最近15分钟平均负载:{{ statusInfo.load.cpuLoad15Min }}</p> |
||||
</div> |
||||
</Tooltip> |
||||
<div class="statusBottom">{{ statusInfo.load.title }}</div> |
||||
</Col> |
||||
<Col span="4"> |
||||
<div class="statusTop">CPU使用率</div> |
||||
<Tooltip placement="bottom" max-width="200"> |
||||
<Circle |
||||
:percent="statusInfo.cpu.percent" |
||||
dashboard |
||||
:size="100" |
||||
:stroke-color="statusInfo.cpu.color" |
||||
class="statusCircle" |
||||
> |
||||
<span class="demo-circle-inner" style="font-size: 24px" |
||||
>{{ statusInfo.cpu.percent }}%</span |
||||
> |
||||
</Circle> |
||||
<div slot="content"> |
||||
<p v-for="item in statusInfo.cpu.cpu" :key="item">{{ item }}</p> |
||||
<p>物理CPU个数:{{ statusInfo.cpu.cpuPhysical }}</p> |
||||
<p>物理CPU的总核心数:{{ statusInfo.cpu.cpuCore }}</p> |
||||
<p>物理CPU的线程总数:{{ statusInfo.cpu.cpuProcessor }}</p> |
||||
</div> |
||||
</Tooltip> |
||||
<div class="statusBottom">{{ statusInfo.cpu.cpuCore }}核心</div> |
||||
</Col> |
||||
<Col span="4"> |
||||
<div class="statusTop">内存使用率</div> |
||||
<Circle |
||||
:percent="statusInfo.mem.percent" |
||||
dashboard |
||||
:size="100" |
||||
:stroke-color="statusInfo.mem.color" |
||||
class="statusCircle" |
||||
> |
||||
<span class="demo-circle-inner" style="font-size: 24px" |
||||
>{{ statusInfo.mem.percent }}%</span |
||||
> |
||||
</Circle> |
||||
<div class="statusBottom"> |
||||
{{ statusInfo.mem.memUsed }} / {{ statusInfo.mem.memTotal }}(MB) |
||||
</div> |
||||
</Col> |
||||
<Col span="4" v-for="(item, index) in diskList" :key="index"> |
||||
<div class="statusTop">{{ item.mountedOn }}</div> |
||||
<Tooltip placement="bottom" max-width="200"> |
||||
<div slot="content"> |
||||
<p>文件系统:{{ item.fileSystem }}</p> |
||||
<p>容量:{{ item.size }}</p> |
||||
<p>已使用:{{ item.used }}</p> |
||||
<p>可使用:{{ item.avail }}</p> |
||||
<p>使用率:{{ item.percent }}%</p> |
||||
<p>挂载点:{{ item.mountedOn }}</p> |
||||
</div> |
||||
<Circle |
||||
:percent="item.percent" |
||||
dashboard |
||||
:size="100" |
||||
:stroke-color="item.color" |
||||
class="statusCircle" |
||||
> |
||||
<span class="demo-circle-inner" style="font-size: 24px" |
||||
>{{ item.percent }}%</span |
||||
> |
||||
</Circle> |
||||
</Tooltip> |
||||
<div class="statusBottom"> |
||||
{{ item.used }} / |
||||
{{ item.size }} |
||||
</div> |
||||
</Col> |
||||
</Row> |
||||
</div> |
||||
</Card> |
||||
<Card :bordered="false" :dis-hover="true" style="margin-bottom: 10px"> |
||||
<p slot="title"> |
||||
<Icon type="ios-options" /> |
||||
统计 |
||||
</p> |
||||
<div> |
||||
<Row :gutter="16"> |
||||
<Col span="4"> |
||||
<Card :dis-hover="true"> |
||||
<div style="text-align: center"> |
||||
<p>仓库占用</p> |
||||
<h2 style="color: #28bcfe">{{ systemBrif.repSize }}</h2> |
||||
</div> |
||||
</Card> |
||||
</Col> |
||||
<Col span="4"> |
||||
<Card :dis-hover="true"> |
||||
<div style="text-align: center"> |
||||
<p>备份占用</p> |
||||
<h2 style="color: #28bcfe">{{ systemBrif.backupSize }}</h2> |
||||
</div> |
||||
</Card> |
||||
</Col> |
||||
<Col span="4"> |
||||
<Card :dis-hover="true"> |
||||
<div style="text-align: center"> |
||||
<p>SVN仓库</p> |
||||
<h2 style="color: #28bcfe">{{ systemBrif.repCount }}</h2> |
||||
</div> |
||||
</Card> |
||||
</Col> |
||||
<Col span="4"> |
||||
<Card :dis-hover="true"> |
||||
<div style="text-align: center"> |
||||
<p>SVN用户</p> |
||||
<h2 style="color: #28bcfe">{{ systemBrif.repUser }}</h2> |
||||
</div> |
||||
</Card> |
||||
</Col> |
||||
<Col span="4"> |
||||
<Card :dis-hover="true"> |
||||
<div style="text-align: center"> |
||||
<p>SVN分组</p> |
||||
<h2 style="color: #28bcfe">{{ systemBrif.repGroup }}</h2> |
||||
</div> |
||||
</Card> |
||||
</Col> |
||||
<Col span="4"> |
||||
<Card :dis-hover="true"> |
||||
<div style="text-align: center"> |
||||
<p>运行日志/条</p> |
||||
<h2 style="color: #28bcfe">{{ systemBrif.logCount }}</h2> |
||||
</div> |
||||
</Card> |
||||
</Col> |
||||
</Row> |
||||
</div> |
||||
</Card> |
||||
</div> |
||||
</template> |
||||
|
||||
<script> |
||||
export default { |
||||
data() { |
||||
return { |
||||
/** |
||||
* 两个板块的显示控制 |
||||
*/ |
||||
display: { |
||||
part1: true, |
||||
part2: true, |
||||
}, |
||||
/** |
||||
* 硬盘信息 |
||||
*/ |
||||
diskList: [], |
||||
/** |
||||
* 状态信息 |
||||
*/ |
||||
statusInfo: { |
||||
load: { |
||||
cpuLoad15Min: 0.22, |
||||
cpuLoad5Min: 0.28, |
||||
cpuLoad1Min: 0.32, |
||||
percent: 16, |
||||
color: "#28bcfe", |
||||
}, |
||||
cpu: { |
||||
percent: 28.2, |
||||
cpu: ["Intel(R) Xeon(R) Platinum 8255C CPU @ 2.50GHz"], |
||||
cpuPhysical: 1, |
||||
cpuPhysicalCore: 1, |
||||
cpuCore: 1, |
||||
cpuProcessor: 1, |
||||
color: "#28bcfe", |
||||
}, |
||||
mem: { |
||||
memTotal: 1838, |
||||
memUsed: 975, |
||||
memFree: 863, |
||||
percent: 53, |
||||
color: "#28bcfe", |
||||
}, |
||||
}, |
||||
/** |
||||
* 统计信息 |
||||
*/ |
||||
systemBrif: { |
||||
os: "", |
||||
repSize: 0, |
||||
repCount: 0, |
||||
repUser: 0, |
||||
repGroup: 0, |
||||
logCount: 0, |
||||
backupSize: 0, |
||||
}, |
||||
}; |
||||
}, |
||||
computed: {}, |
||||
created() {}, |
||||
mounted() { |
||||
var that = this; |
||||
if (that.display.part1) { |
||||
that.GetDisk(); |
||||
that.GetSystemStatus(); |
||||
//设置定时器 |
||||
that.timer = window.setInterval(() => { |
||||
setTimeout(that.GetSystemStatus(), 0); |
||||
}, 3000); |
||||
//离开页面清除定时器 |
||||
that.$once("hook:beforeDestroy", () => { |
||||
clearInterval(that.timer); |
||||
}); |
||||
} |
||||
if (that.display.part2) { |
||||
that.GetSystemAnalysis(); |
||||
} |
||||
}, |
||||
methods: { |
||||
/** |
||||
* 获取磁盘 |
||||
*/ |
||||
GetDisk() { |
||||
var that = this; |
||||
var data = {}; |
||||
that.$axios |
||||
.post("/api.php?c=Statistics&a=GetDisk&t=web", data) |
||||
.then(function (response) { |
||||
var result = response.data; |
||||
if (result.status == 1) { |
||||
// that.$Message.success(result.message); |
||||
that.diskList = result.data; |
||||
} else { |
||||
that.$Message.error(result.message); |
||||
} |
||||
}) |
||||
.catch(function (error) { |
||||
console.log(error); |
||||
that.$Message.error("出错了 请联系管理员!"); |
||||
}); |
||||
}, |
||||
/** |
||||
* 获取状态 |
||||
*/ |
||||
GetSystemStatus() { |
||||
var that = this; |
||||
var data = {}; |
||||
that.$axios |
||||
.post("/api.php?c=Statistics&a=GetSystemStatus&t=web", data) |
||||
.then(function (response) { |
||||
var result = response.data; |
||||
if (result.status == 1) { |
||||
// that.$Message.success(result.message); |
||||
that.statusInfo = result.data; |
||||
} else { |
||||
that.$Message.error(result.message); |
||||
} |
||||
}) |
||||
.catch(function (error) { |
||||
console.log(error); |
||||
that.$Message.error("出错了 请联系管理员!"); |
||||
}); |
||||
}, |
||||
/** |
||||
* 获取统计 |
||||
*/ |
||||
GetSystemAnalysis() { |
||||
var that = this; |
||||
var data = {}; |
||||
that.$axios |
||||
.post("/api.php?c=Statistics&a=GetSystemAnalysis&t=web", data) |
||||
.then(function (response) { |
||||
var result = response.data; |
||||
if (result.status == 1) { |
||||
// that.$Message.success(result.message); |
||||
that.systemBrif = result.data; |
||||
} else { |
||||
that.$Message.error(result.message); |
||||
} |
||||
}) |
||||
.catch(function (error) { |
||||
console.log(error); |
||||
that.$Message.error("出错了 请联系管理员!"); |
||||
}); |
||||
}, |
||||
}, |
||||
}; |
||||
</script> |
||||
|
||||
<style> |
||||
.statusTop { |
||||
width: 140px; |
||||
text-align: center; |
||||
margin-bottom: 5px; |
||||
|
||||
white-space: nowrap; |
||||
overflow: hidden; |
||||
text-overflow: ellipsis; |
||||
} |
||||
.statusCircle { |
||||
margin-left: 20px; |
||||
} |
||||
.statusBottom { |
||||
width: 140px; |
||||
text-align: center; |
||||
margin-bottom: 15px; |
||||
} |
||||
</style> |
@ -0,0 +1,70 @@
@@ -0,0 +1,70 @@
|
||||
<?php |
||||
/* |
||||
* @Author: witersen |
||||
* @Date: 2022-04-24 23:37:05 |
||||
* @LastEditors: witersen |
||||
* @LastEditTime: 2022-05-07 14:00:06 |
||||
* @Description: QQ:1801168257 |
||||
*/ |
||||
|
||||
namespace app\controller; |
||||
|
||||
use app\service\Statistics as ServiceStatistics; |
||||
|
||||
class Statistics extends Base |
||||
{ |
||||
/** |
||||
* 服务层对象 |
||||
* |
||||
* @var object |
||||
*/ |
||||
private $ServiceStatistics; |
||||
|
||||
function __construct() |
||||
{ |
||||
parent::__construct(); |
||||
|
||||
$this->ServiceStatistics = new ServiceStatistics(); |
||||
} |
||||
|
||||
/** |
||||
* 获取状态 |
||||
* |
||||
* 负载状态 |
||||
* CPU使用率 |
||||
* 内存使用率 |
||||
*/ |
||||
public function GetSystemStatus() |
||||
{ |
||||
$result = $this->ServiceStatistics->GetSystemStatus(); |
||||
json2($result); |
||||
} |
||||
|
||||
/** |
||||
* 获取硬盘 |
||||
* |
||||
* 获取硬盘数量和每个硬盘的详细信息 |
||||
*/ |
||||
public function GetDisk() |
||||
{ |
||||
$result = $this->ServiceStatistics->GetDisk(); |
||||
json2($result); |
||||
} |
||||
|
||||
/** |
||||
* 获取统计 |
||||
* |
||||
* 操作系统类型 |
||||
* 仓库占用体积 |
||||
* SVN仓库数量 |
||||
* SVN用户数量 |
||||
* SVN分组数量 |
||||
* 计划任务数量 |
||||
* 运行日志数量 |
||||
*/ |
||||
public function GetSystemAnalysis() |
||||
{ |
||||
$result = $this->ServiceStatistics->GetSystemAnalysis(); |
||||
json2($result); |
||||
} |
||||
} |
@ -0,0 +1,260 @@
@@ -0,0 +1,260 @@
|
||||
<?php |
||||
/* |
||||
* @Author: witersen |
||||
* @Date: 2022-04-24 23:37:05 |
||||
* @LastEditors: witersen |
||||
* @LastEditTime: 2022-05-07 01:45:39 |
||||
* @Description: QQ:1801168257 |
||||
*/ |
||||
|
||||
namespace app\service; |
||||
|
||||
class Statistics extends Base |
||||
{ |
||||
function __construct() |
||||
{ |
||||
parent::__construct(); |
||||
} |
||||
|
||||
/** |
||||
* 获取状态 |
||||
* |
||||
* 负载状态 |
||||
* CPU使用率 |
||||
* 内存使用率 |
||||
*/ |
||||
public function GetSystemStatus() |
||||
{ |
||||
/** |
||||
* ----------负载计算开始---------- |
||||
*/ |
||||
$laodavg = FunShellExec("cat /proc/loadavg | awk '{print $1,$2,$3}'"); |
||||
$laodavg = $laodavg['result']; |
||||
$laodavgArray = explode(' ', $laodavg); |
||||
|
||||
//获取CPU15分钟前到现在的负载平均值 |
||||
$cpuLoad15Min = (float)trim($laodavgArray[2]); |
||||
|
||||
//获取CPU5分钟前到现在的负载平均值 |
||||
$cpuLoad5Min = (float)trim($laodavgArray[1]); |
||||
|
||||
//获取CPU1分钟前到现在的负载平均值 |
||||
$cpuLoad1Min = (float)trim($laodavgArray[0]); |
||||
|
||||
//获取cpu总核数 |
||||
$cpuCount = FunShellExec('grep -c "model name" /proc/cpuinfo'); |
||||
$cpuCount = $cpuCount['result']; |
||||
$cpuCount = (int)trim($cpuCount); |
||||
|
||||
//一分钟的平均负载 / (cpu总核数 * 2),超过100则为100 不超100为真实值取整 |
||||
$percent = round($cpuLoad1Min / ($cpuCount * 2) * 100, 1); |
||||
if ($percent > 100) { |
||||
$percent = 100; |
||||
} |
||||
|
||||
/** |
||||
* ----------负载计算结束---------- |
||||
*/ |
||||
$data['load'] = [ |
||||
'cpuLoad15Min' => $cpuLoad15Min, |
||||
'cpuLoad5Min' => $cpuLoad5Min, |
||||
'cpuLoad1Min' => $cpuLoad1Min, |
||||
'percent' => $percent, |
||||
'color' => FunGetColor($percent)['color'], |
||||
'title' => FunGetColor($percent)['title'] |
||||
]; |
||||
|
||||
/** |
||||
* ----------cpu计算开始---------- |
||||
*/ |
||||
/** |
||||
* cpu使用率 |
||||
* |
||||
* %Cpu(s): 0.0 us, 3.2 sy, 0.0 ni, 96.8 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st |
||||
* |
||||
* us user CPU time 用户空间占用CPU百分比 |
||||
* sy system CPU time 内核空间占用CPU百分比 |
||||
* ni nice CPU 用户进程空间内改变过优先级的进程占用CPU百分比 |
||||
* id idle 空闲CPU百分比 |
||||
* wa iowait 等待输入输出的CPU时间百分比 |
||||
* hi hardware 硬件中断 |
||||
* si software 软件中断 |
||||
* st steal 实时 |
||||
*/ |
||||
$topResult = FunShellExec('top -b -n 1 | grep Cpu'); |
||||
$topResult = $topResult['result']; |
||||
preg_match('/ni,(.*?)id/', $topResult, $matches); |
||||
$id = 100 - (float)trim($matches[1]); |
||||
|
||||
//cpu型号 |
||||
$cpuModelArray = []; |
||||
$cpuModelName = FunShellExec("cat /proc/cpuinfo | grep 'model name' | uniq"); |
||||
$cpuModelName = $cpuModelName['result']; |
||||
$explodeArray = explode("\n", trim($cpuModelName)); |
||||
foreach ($explodeArray as $value) { |
||||
if (trim($value) != '') { |
||||
$tempArray = explode(':', $value); |
||||
array_push($cpuModelArray, trim($tempArray[1])); |
||||
} |
||||
} |
||||
|
||||
//物理cpu个数 |
||||
$cpuPhysical = FunShellExec("cat /proc/cpuinfo | grep 'physical id' | sort -u | wc -l"); |
||||
$cpuPhysical = $cpuPhysical['result']; |
||||
$cpuPhysical = (int)trim($cpuPhysical); |
||||
|
||||
//每个物理cpu的物理核心数 |
||||
$cpuPhysicalCore = FunShellExec("cat /proc/cpuinfo | grep 'cpu cores' | wc -l"); |
||||
$cpuPhysicalCore = $cpuPhysicalCore['result']; |
||||
$cpuPhysicalCore = (int)trim($cpuPhysicalCore); |
||||
|
||||
//总物理核心数 = 物理cpu个数 * 每个物理cpu的物理核心数(每个物理cpu的物理核心数都一样吗?) |
||||
$cpuCore = $cpuPhysical * $cpuPhysicalCore; |
||||
|
||||
//逻辑核心总数(线程总数) |
||||
$cpuProcessor = FunShellExec("cat /proc/cpuinfo | grep 'processor' | wc -l"); |
||||
$cpuProcessor = $cpuProcessor['result']; |
||||
$cpuProcessor = (int)trim($cpuProcessor); |
||||
|
||||
/** |
||||
* ----------cpu计算结束---------- |
||||
*/ |
||||
$data['cpu'] = [ |
||||
'percent' => round($id, 1), |
||||
'cpu' => $cpuModelArray, |
||||
'cpuPhysical' => $cpuPhysical, |
||||
'cpuPhysicalCore' => $cpuPhysicalCore, |
||||
'cpuCore' => $cpuCore, |
||||
'cpuProcessor' => $cpuProcessor, |
||||
'color' => FunGetColor($id)['color'] |
||||
]; |
||||
|
||||
/** |
||||
* ----------内存计算开始---------- |
||||
*/ |
||||
/** |
||||
* MemTotal 总内存 |
||||
* MemFree 空闲内存 |
||||
* MemAvailable 可用内存(MemFree + 可回收的内存),系统中有些内存虽然已被使用但是可以回收,比如cache、buffer、slab都有一部分可以回收 |
||||
*/ |
||||
//物理内存总量 |
||||
$memTotal = FunShellExec("cat /proc/meminfo | grep 'MemTotal' | awk '{print $2}'"); |
||||
$memTotal = $memTotal['result']; |
||||
$memTotal = (int)trim($memTotal); |
||||
|
||||
//操作系统可用内存总量(没有使用空闲内存) |
||||
$memFree = FunShellExec("cat /proc/meminfo | grep 'MemAvailable' | awk '{print $2}'"); |
||||
$memFree = $memFree['result']; |
||||
$memFree = (int)trim($memFree); |
||||
|
||||
//操作系统已使用内存总量 |
||||
$memUsed = $memTotal - $memFree; |
||||
|
||||
//内存使用率 |
||||
$percent = round($memUsed / $memTotal * 100, 1); |
||||
|
||||
/** |
||||
* ----------内存计算结束---------- |
||||
*/ |
||||
$data['mem'] = [ |
||||
'memTotal' => round($memTotal / 1024), |
||||
'memUsed' => round($memUsed / 1024), |
||||
'memFree' => round($memFree / 1024), |
||||
'percent' => $percent, |
||||
'color' => FunGetColor($percent)['color'] |
||||
]; |
||||
|
||||
return message(200, 1, '成功', $data); |
||||
} |
||||
|
||||
/** |
||||
* 获取硬盘 |
||||
* |
||||
* 获取硬盘数量和每个硬盘的详细信息 |
||||
*/ |
||||
public function GetDisk() |
||||
{ |
||||
$rs = FunShellExec('df -lh | grep -E "^(/)"'); |
||||
$rs = $rs['result']; |
||||
|
||||
//将多个连续的空格换为一个 |
||||
$result = preg_replace("/\s{2,}/", ' ', $rs); |
||||
|
||||
//多个硬盘 |
||||
$diskArray = explode("\n", $result); |
||||
|
||||
$data = []; |
||||
|
||||
//处理 |
||||
foreach ($diskArray as $value) { |
||||
if (trim($value) != '') { |
||||
$diskInfo = explode(" ", $value); |
||||
array_push($data, [ |
||||
'fileSystem' => $diskInfo[0], |
||||
'size' => $diskInfo[1], |
||||
'used' => $diskInfo[2], |
||||
'avail' => $diskInfo[3], |
||||
'percent' => (int)str_replace('%', '', $diskInfo[4]), |
||||
'mountedOn' => $diskInfo[5], |
||||
'color' => FunGetColor((int)str_replace('%', '', $diskInfo[4]))['color'] |
||||
]); |
||||
} |
||||
} |
||||
|
||||
return message(200, 1, '成功', $data); |
||||
} |
||||
|
||||
/** |
||||
* 获取统计 |
||||
* |
||||
* 操作系统类型 |
||||
* 仓库占用体积 |
||||
* SVN仓库数量 |
||||
* SVN用户数量 |
||||
* SVN分组数量 |
||||
* 计划任务数量 |
||||
* 运行日志数量 |
||||
*/ |
||||
public function GetSystemAnalysis() |
||||
{ |
||||
//操作系统类型和版本 |
||||
$os = FunShellExec("cat /etc/redhat-release"); |
||||
$os = $os['result']; |
||||
|
||||
//仓库占用体积 |
||||
$repSize = FunFormatSize(FunGetDirSizeDu($this->config_svn['rep_base_path'])); |
||||
|
||||
//备份占用体积 |
||||
$backupSize = FunFormatSize(FunGetDirSizeDu($this->config_svn['backup_base_path'])); |
||||
|
||||
//SVN仓库数量 |
||||
$repCount = count($this->SVNAdminRep->GetSimpleRepList()); |
||||
|
||||
//SVN用户数量 |
||||
$userCount = $this->SVNAdminUser->GetSvnUserList($this->passwdContent); |
||||
if ($userCount === '0') { |
||||
return message(200, 0, '文件格式错误(不存在[users]标识)'); |
||||
} |
||||
$userCount = count($userCount); |
||||
|
||||
//SVN分组数量 |
||||
$groupCount = $this->SVNAdminGroup->GetSvnGroupList($this->authzContent); |
||||
if ($userCount === '0') { |
||||
return message(200, 0, '文件格式错误(不存在[groups]标识)'); |
||||
} |
||||
$groupCount = count($groupCount); |
||||
|
||||
//运行日志数量 |
||||
$logCount = $this->database->count('logs', ['log_id[>]' => 0]); |
||||
|
||||
return message(200, 1, '成功', [ |
||||
'os' => trim($os), |
||||
'repSize' => $repSize, |
||||
'repCount' => $repCount, |
||||
'repUser' => $userCount, |
||||
'repGroup' => $groupCount, |
||||
'logCount' => $logCount, |
||||
'backupSize' => $backupSize |
||||
]); |
||||
} |
||||
} |
@ -1,11 +0,0 @@
@@ -1,11 +0,0 @@
|
||||
[Unit] |
||||
Description=Subversion protocol daemon |
||||
After=syslog.target network.target |
||||
|
||||
[Service] |
||||
Type=simple |
||||
ExecStart=/usr/bin/php /var/www/html/server/svnadmind.php start |
||||
ExecStop=/usr/bin/php /var/www/html/server/svnadmind.php stop |
||||
|
||||
[Install] |
||||
WantedBy=multi-user.target |
Loading…
Reference in new issue