systemctl相关
<h2>参考文档</h2>
<p>命令:
<a href="https://www.ruanyifeng.com/blog/2016/03/systemd-tutorial-commands.html">https://www.ruanyifeng.com/blog/2016/03/systemd-tutorial-commands.html</a></p>
<p>实战:
<a href="https://www.ruanyifeng.com/blog/2016/03/systemd-tutorial-part-two.html">https://www.ruanyifeng.com/blog/2016/03/systemd-tutorial-part-two.html</a></p>
<h2>设置服务</h2>
<p>服务配置 <code>/usr/lib/systemd/system/dtunnel-lite-s.service</code> 内容如下:</p>
<pre><code>[Unit]
Description=dtunnel-lite center server
After=network-online.target
Wants=network-online.target
[Service]
ExecStart=/bin/bash /root/dtunnel_lite/start_service.sh
ExecStop=/usr/bin/killall dtunnel_lite
#ExecStop=/bin/kill -s TERM $MAINPID
Type=simple
Restart=on-failure
RestartSec=60s
[Install]
WantedBy=multi-user.target
</code></pre>
<p>脚本 <code>/root/dtunnel_lite/start_service.sh</code> 内容如下:</p>
<pre><code>#!/bin/bash
shdir="`dirname $0`"
cd ${shdir}
bin="dtunnel_lite"
args="-service :6443 -auth xxx -kcp k2:v2"
logf="logs/run.log"
# 限制文件大小,以 KB 为单位
function loglimit()
{
if [ ${#} -ne 2 ]; then
return 2
fi
local LOGFILE=${1}
local MAXKSIZE=${2}
if [ ! -f ${LOGFILE} ]; then
return 1
fi
local MINKSIZE
local LOGDIR="`dirname ${LOGFILE}`"
local TMP="${LOGDIR}/`basename ${LOGFILE}`".tmp # 临时文件放到同目录下
local CURKSIZE=`ls -l ${1} | awk '{print $5}'`
let MINKSIZE=${MAXKSIZE}*1/2 # 日志截取一半
let CURKSIZE/=1024
if [ ${CURKSIZE} -gt ${MAXKSIZE} ]; then
let SKIPKSIZE=${CURKSIZE}-${MINKSIZE}
#echo "dd if=${LOGFILE} of=${TMP} bs=1024 count=${MAXKSIZE} skip=${SKIPKSIZE}" 1>/dev/null 2>&1
dd if=${LOGFILE} of=${TMP} bs=1024 count=${MAXKSIZE} skip=${SKIPKSIZE} 1>/dev/null 2>&1
mv -f ${TMP} ${LOGFILE}
[ -f ${TMP} ] && rm -f ${TMP}
fi
}
# kill old process
killall ${bin} 2>/dev/null
# mkdir logdir
logdir="`dirname ${logf}`"
[ ! -d ${logdir} ] && mkdir -p $logdir
# limit log file size
loglimit ${logf} 2048
# start
./${bin} ${args} 1>>${logf} 2>&1
[ $? -eq 0 ] && exit 39527</code></pre>
<h2>去掉服务</h2>
<pre><code># 停止服务
pi@raspberrypi:~ $ sudo systemctl stop dtunnel-lite-c.service
# 禁止服务
pi@raspberrypi:~ $ sudo systemctl disable dtunnel-lite-c.service
Removed /etc/systemd/system/multi-user.target.wants/dtunnel-lite-c.service.</code></pre>
<h2>相关命令</h2>
<pre><code># 重新加载配置文件
$ sudo systemctl daemon-reload
# 重启相关服务
$ sudo systemctl restart foobar
# 查夜服务状态
$ sudo systemctl status httpd
# 开机启动
$ sudo systemctl enable httpd
# 实时滚动显示最新日志
$ sudo journalctl -f</code></pre>
<p>日志相关:</p>
<pre><code>
# 查看所有日志(默认情况下 ,只保存本次启动的日志)
$ sudo journalctl
# 查看内核日志(不显示应用日志)
$ sudo journalctl -k
# 查看系统本次启动的日志
$ sudo journalctl -b
$ sudo journalctl -b -0
# 查看上一次启动的日志(需更改设置)
$ sudo journalctl -b -1
# 查看指定时间的日志
$ sudo journalctl --since="2012-10-30 18:17:16"
$ sudo journalctl --since "20 min ago"
$ sudo journalctl --since yesterday
$ sudo journalctl --since "2015-01-10" --until "2015-01-11 03:00"
$ sudo journalctl --since 09:00 --until "1 hour ago"
# 显示尾部的最新10行日志
$ sudo journalctl -n
# 显示尾部指定行数的日志
$ sudo journalctl -n 20
# 实时滚动显示最新日志
$ sudo journalctl -f
# 查看指定服务的日志
$ sudo journalctl /usr/lib/systemd/systemd
# 查看指定进程的日志
$ sudo journalctl _PID=1
# 查看某个路径的脚本的日志
$ sudo journalctl /usr/bin/bash
# 查看指定用户的日志
$ sudo journalctl _UID=33 --since today
# 查看某个 Unit 的日志
$ sudo journalctl -u nginx.service
$ sudo journalctl -u nginx.service --since today
# 实时滚动显示某个 Unit 的最新日志
$ sudo journalctl -u nginx.service -f
# 合并显示多个 Unit 的日志
$ journalctl -u nginx.service -u php-fpm.service --since today
# 查看指定优先级(及其以上级别)的日志,共有8级
# 0: emerg
# 1: alert
# 2: crit
# 3: err
# 4: warning
# 5: notice
# 6: info
# 7: debug
$ sudo journalctl -p err -b
# 日志默认分页输出,--no-pager 改为正常的标准输出
$ sudo journalctl --no-pager
# 以 JSON 格式(单行)输出
$ sudo journalctl -b -u nginx.service -o json
# 以 JSON 格式(多行)输出,可读性更好
$ sudo journalctl -b -u nginx.serviceqq
-o json-pretty
# 显示日志占据的硬盘空间
$ sudo journalctl --disk-usage
# 指定日志文件占据的最大空间
$ sudo journalctl --vacuum-size=1G
# 指定日志文件保存多久
$ sudo journalctl --vacuum-time=1years</code></pre>