日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關咨詢
選擇下列產(chǎn)品馬上在線溝通
服務時間:8:30-17:00
你可能遇到了下面的問題
關閉右側工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
最詳細的CentOS6與7對比(二):服務管理對比

本主題將從3個角度進行對比

成都創(chuàng)新互聯(lián)為客戶提供專業(yè)的成都網(wǎng)站設計、成都網(wǎng)站制作、程序、域名、空間一條龍服務,提供基于WEB的系統(tǒng)開發(fā). 服務項目涵蓋了網(wǎng)頁設計、網(wǎng)站程序開發(fā)、WEB系統(tǒng)開發(fā)、微信二次開發(fā)、手機網(wǎng)站開發(fā)等網(wǎng)站方面業(yè)務。

  1. 常見設置(centos 6 vs CentOS 7)
  2. 服務管理(Sysvinit vs Upstart vs Systemd)
  3. 性能測試(cpu/mem/io/oltp)

本文為第二部分:服務管理的對比

1. sysvinit、upstart、systemd簡介

/ CentOS 5 CentOS 6 CentOS 7 備注
sysvinit 第一代,傳統(tǒng),兼容最多(/etc/init.d/、/etc/rc.X)
upstart 第二代,形似systemd雛形(/etc/init)
systemd 第三代,配合cgroup,systemd完全接管整個系統(tǒng)(/usr/lib/systemd)

2. sysvinit、upstart、systemd常用命令

動作 sysvinit upstart systemd
查看 service mytest status initctl status mytest systemctl status mytest.service
啟動 service mytest start initctl start mytest systemctl start mytest.service
關閉 service mytest stop initctl stop mytest systemctl stop mytest.service
強殺進程 kill -9 PID kill -9 PID systemctl kill mytest.service --signal=9
重啟 service mytest restart initctl restart mytest systemctl restart mytest.service
重載 service mytest reload initctl reload mytest systemctl reload mytest.service
開機啟動 chkconfig mytest on /etc/init/mytest.conf里配置start on runlevel [3] systemctl enable mytest.service

3. runlevel運行級別

運行級別 CentOS 6 CentOS 7
0 halt runlevel0.target -> poweroff.target
1 Single user mode runlevel1.target -> rescue.target
2 Multiuser, without NFS runlevel2.target -> multi-user.target
3 Full multiuser mode runlevel3.target -> multi-user.target
4 unused runlevel4.target -> multi-user.target
5 X11 runlevel5.target -> graphical.target
6 reboot runlevel6.target -> reboot.target
查看 cat /etc/inittab systemctl get-default
開機生效 編輯/etc/inittab systemctl set-default multi-user.target
立即切換 init 5 systemctl isolate graphical.target

4. 日志查詢

CentOS 6: 手工在/var/log/messages、/var/log/dmesg、/var/log/secure中grep,麻煩且效率低

CentOS 7: 統(tǒng)一使用journalctl,可以使用多個因素匹配,比如時間段、服務名、日志級別等等。另外,systemd日志默認經(jīng)過壓縮,是二進制文件,無法直接查看

journalctl常用命令 作用 CentOS 6比
journalctl 所有日志,包含系統(tǒng)、內(nèi)核等等 手動在對應日志文件中grep
journalctl --dmesg 查看當前開機后的內(nèi)核日志 dmesg
journalctl --boot 查看當前開機后的日志 先查當前開機啟動時間,然后cat /var/log/...
journalctl --boot=-1 查看上一次啟動的日志 查詢上次開機到當前開機之間時間,然后cat /var/log/...
journalctl --since="2018-08-01 12:00:00" 查看從指定時間開始到當前的日志 手動在日志里grep
journalctl --since=yesterday --until=today 查看昨天0-24點的日志 手動在日志里grep
journalctl -n 20 查看最后10行 tail -n 20
journalctl -f 實時滾動顯示最新日志 tail -f
journalctl -e 直接翻到最后 tail
journalctl -u mytest.service 查看指定服務日志 先查詢?nèi)罩颈4媛窂?,然后再cat查看
journalctl -p 0 查看指定日志級別的日志,日志級別從0到7 通過syslog將不同級別的日志放到不同文件中
journalctl -u mytest.service -o json-pretty或-o verbose 查看每條日志詳細信息(包含元信息)
journalctl --disk-usage 查看日志所在的磁盤空間 du -shx /var/log/messages等

5. 實現(xiàn)守護進程

CentOS 6

  • sysvinit需要自行實現(xiàn)
    • nohup &
    • screen
    • supervisor
  • upstart和systemd類似,將程序運行在前臺即可

CentOS 7

  • 由systemd啟動,將程序運行在前臺即可

6. sysvinit、upstart、systemd例子

sysvinit

cat > /etc/init.d/mytest <

upstart

cat > /etc/init/mytest.conf <

systemd

cat > /usr/lib/systemd/system/mytest.service <

7. PID管理

  • sysvinit: 需要生成PID文件,用于后期關閉、重啟等使用
  • upstart: 無需PID文件,upstart會記錄主進程ID,子進程ID沒有記錄
  • systemd: 無需PID文件,所有進程ID由cgroup統(tǒng)一接管

8. 內(nèi)置的資源限制

CentOS 6: 除了ulimit,沒有其他限制進程資源的簡便方法
CentOS 7: 除了ulimit,還支持部分cgroup限制,可對進程做內(nèi)存限制和cpu資源限制等

[Service]
ExecStart=...
MemoryLimit=500M
CPUShares=100

另外,CentOS 7可以通過systemd-cgtop命令查看cgroup里的性能數(shù)據(jù)

9. 服務異常自動重啟

upstart

start on runlevel [3]

description "mytest"

exec /root/mytest.sh
post-stop exec sleep 5
respawn
respawn limit unlimited

systemd

[Unit]
Description=mytest
 [Service]
Type=simple
ExecStart=/root/mytest.sh
Restart=always
RestartSec=5
StartLimitInterval=0
 [Install]
WantedBy=multi-user.target

上面2種方式均表示,無限次自動重啟,每次重啟前等待5秒

10. 寫日志方式

CentOS 6: 自行輸出到文件中,或通過syslog記錄(如logger命令)

CentOS 7: 只要程序由systemd啟動,只需將輸出日志到標準輸出或標準錯誤

  • 建議centos7只將應用程序的一些元信息輸出到標準輸出或標準錯誤,比如啟動成功、啟動失敗等等
  • 不建議將業(yè)務日志輸出到journal。因為journal中所有日志都存在一個文件中,會導致2個問題:
    • 如果沒有做日志持久化,則默認存在內(nèi)存中,會導致最多一半的內(nèi)存被占用
    • 存儲量很大,會導致查詢其他日志很耗時
  • 解決辦法:輸出到syslog,[Service]支持StandardOutput=syslog

11. 指定每條日志級別

CentOS 6: 通過syslog將不同級別的日志輸出到不同文件

CentOS 7: 只需在輸出的每一行開頭加<日志級別>,比如

echo '<0>hello, emerg'
echo '<1>hello, alert'
echo '<2>hello, crit'
echo '<3>hello, err'
echo '<4>hello, warning'
echo '<5>hello, notice'
echo '<6>hello, info'
echo '<7>hello, debug'

12. systemd日志永久保存

systemd日志默認保存在內(nèi)存中,因此當服務器重啟后,就無法通過journalctl來查看之前的日志,解決方法:

mkdir -p /var/log/journal
systemctl restart systemd-journald

當前文章:最詳細的CentOS6與7對比(二):服務管理對比
當前路徑:http://m.5511xx.com/article/djpssoi.html