linux下abrtd服务,鳥哥的 Linux 私房菜

17.3.4 多重的重複設定方式:以 getty 為例

我們的 CentOS 7 開機完成後,不是說有 6 個終端機可以使用嗎?就是那個 tty1~tty6 的啊!那個東西是由 agetty 這個指令達成的。

OK!那麼這個終端機的功能又是從哪個項目所提供的呢?其實,那個東東涉及很多層面,主要管理的是 getty.target 這個 target unit ,

不過,實際產生 tty1~tty6 的則是由 getty@.service 所提供的!咦!那個 @ 是啥東西?

先來查閱一下 /usr/lib/systemd/system/getty@.service 的內容好了:

[root@study ~]# cat /usr/lib/systemd/system/getty@.service

[Unit]

Description=Getty on %I

Documentation=man:agetty(8) man:systemd-getty-generator(8)

Documentation=http://0pointer.de/blog/projects/serial-console.html

After=systemd-user-sessions.service plymouth-quit-wait.service

After=rc-local.service

Before=getty.target

ConditionPathExists=/dev/tty0

[Service]

ExecStart=-/sbin/agetty --noclear %I $TERM

Type=idle

Restart=always

RestartSec=0

UtmpIdentifier=%I

TTYPath=/dev/%I

TTYReset=yes

TTYVHangup=yes

TTYVTDisallocate=yes

KillMode=process

IgnoreSIGPIPE=no

SendSIGHUP=yes

[Install]

WantedBy=getty.target

比較重要的當然就是 ExecStart 項目囉!那麼我們去 man agetty 時,發現到它的語法應該是『 agetty --noclear tty1 』之類的字樣,

因此,我們如果要啟動六個 tty 的時候,基本上應該要有六個啟動設定檔。亦即是可能會用到 getty1.service, getty2.service...getty6.service 才對!

哇!這樣控管很麻煩啊~所以,才會出現這個 @ 的項目啦!咦!這個 @ 到底怎麼回事呢?我們先來看看 getty@.service 的上游,亦即是 getty.target 這個東西的內容好了!

[root@study ~]# systemctl show getty.target

# 那個 show 的指令可以將 getty.target 的預設設定值也取出來顯示!

Names=getty.target

Wants=getty@tty1.service

WantedBy=multi-user.target

Conflicts=shutdown.target

Before=multi-user.target

After=getty@tty1.service getty@tty2.service getty@tty3.service getty@tty4.service

getty@tty6.service getty@tty5.service

.....(後面省略).....

你會發現,咦!怎麼會多出六個怪異的 service 呢?我們拿 getty@tty1.service 來說明一下好了!當我們執行完 getty.target 之後,

他會持續要求 getty@tty1.service 等六個服務繼續啟動。那我們的 systemd 就會這麼作:

先看 /usr/lib/systemd/system/, /etc/systemd/system/ 有沒有 getty@tty1.service 的設定,若有就執行,若沒有則執行下一步;

找 getty@.service 的設定,若有則將 @ 後面的資料帶入成 %I 的變數,進入 getty@.service 執行!

這也就是說,其實 getty@tty1.service 實際上是不存在的!他主要是透過 getty@.service 來執行~也就是說, getty@.service 的目的是為了要簡化多個執行的啟動設定,

他的命名方式是這樣的:

原始檔案:執行服務名稱@.service

執行檔案:執行服務名稱@範例名稱.service

因此當有範例名稱帶入時,則會有一個新的服務名稱產生出來!你再回頭看看 getty@.service 的啟動腳本:

ExecStart=-/sbin/agetty --noclear %I $TERM

上表中那個 %I 指的就是『範例名稱』!根據 getty.target 的資訊輸出來看,getty@tty1.service 的 %I 就是 tty1 囉!因此執行腳本就會變成『 /sbin/agetty --noclear tty1 』!

所以我們才有辦法以一個設定檔來啟動多個 tty1 給用戶登入囉!

將 tty 的數量由 6 個降低到 4 個

現在你應該要感到困擾的是,那麼『 6 個 tty 是誰規定的』為什麼不是 5 個還是 7 個?這是因為 systemd 的登入設定檔 /etc/systemd/logind.conf 裡面規範的啦!

假如你想要讓 tty 數量降低到剩下 4 個的話,那麼可以這樣實驗看看:

# 1. 修改預設的 logind.conf 內容,將原本 6 個虛擬終端機改成 4 個

[root@study ~]# vim /etc/systemd/logind.conf

[Login]

NAutoVTs=4

ReserveVT=0

# 原本是 6 個而且還註解,請取消註解,然後改成 4 吧!

# 2. 關閉不小心啟動的 tty5, tty6 並重新啟動 getty.target 囉!

[root@study ~]# systemctl stop getty@tty5.service

[root@study ~]# systemctl stop getty@tty6.service

[root@study ~]# systemctl restart systemd-logind.service

現在你再到桌面環境下,按下 [ctrl]+[alt]+[F1]~[F6] 就會發現,只剩下四個可用的 tty 囉!後面的 tty5, tty6 已經被放棄了!不再被啟動喔!

好!那麼我暫時需要啟動 tty8 時,又該如何處理呢?需要重新建立一個腳本嗎?不需要啦!可以這樣作!

[root@study ~]# systemctl start getty@tty8.service

無須額外建立其他的啟動服務設定檔喔!

暫時新增 vsftpd 到 2121 埠口

不知道你有沒有發現,其實在 /usr/lib/systemd/system 底下還有個特別的 vsftpd@.service 喔!來看看他的內容:

[root@study ~]# cat /usr/lib/systemd/system/vsftpd@.service

[Unit]

Description=Vsftpd ftp daemon

After=network.target

PartOf=vsftpd.target

[Service]

Type=forking

ExecStart=/usr/sbin/vsftpd /etc/vsftpd/%i.conf

[Install]

WantedBy=vsftpd.target

根據前面 getty@.service 的說明,我們知道在啟動的腳本設定當中, %i 或 %I 就是代表 @ 後面接的範例檔名的意思!

那我能不能建立 vsftpd3.conf 檔案,然後透過該檔案來啟動新的服務呢?就來玩玩看!

# 1. 根據 vsftpd@.service 的建議,於 /etc/vsftpd/ 底下先建立新的設定檔

[root@study ~]# cd /etc/vsftpd

[root@study vsftpd]# cp vsftpd.conf vsftpd3.conf

[root@study vsftpd]# vim vsftpd3.conf

listen_port=2121

# 2. 暫時啟動這個服務,不要永久啟動他!

[root@study vsftpd]# systemctl start vsftpd@vsftpd3.service

[root@study vsftpd]# systemctl status vsftpd@vsftpd3.service

vsftpd@vsftpd3.service - Vsftpd ftp daemon

Loaded: loaded (/usr/lib/systemd/system/vsftpd@.service; disabled)

Active: active (running) since Thu 2015-08-13 01:34:05 CST; 5s ago

[root@study vsftpd]# netstat -tlnp

Active Internet connections (only servers)

Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name

tcp6 0 0 :::2121 :::* LISTEN 16404/vsftpd

tcp6 0 0 :::555 :::* LISTEN 12672/vsftpd

tcp6 0 0 :::21 :::* LISTEN 12670/vsftpd

因為我們啟用了 vsftpd@vsftpd3.service ,代表要使用的設定檔在 /etc/vsftpd/vsftpd3.conf 的意思!所以可以直接透過 vsftpd@.service 而無須重新設定啟動腳本!

這樣是否比前幾個小節的方法還要簡便呢? ^_^。透過這個方式,你就可以使用到新的設定檔囉!只是你得要注意到 @ 這個東西就是了! ^_^

Tips

3e5134973d7211edf4b7c756fd7aa12c.gif聰明的讀者可能立刻發現一件事,為啥這次 FTP 增加了 2121 埠口卻不用修改 SELinux 呢?這是因為預設啟動小於 1024 號碼以下的埠口時,

需要使用到 root 的權限,因此小於 1024 以下埠口的啟動較可怕。而這次範例中,我們使用 2121 埠口,他對於系統的影響可能小一些 (其實一樣可怕!),

所以就忽略了 SELinux 的限制了!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值