KazuminEngine

プログラマーの日記

systemdの隠れたログを見よう

前置き

こんにちは、久しぶりのかずみんです。 あんまり書くことなかったので、書いてませんでした w

今回、私の都合により、日本語を適当にやっていきますw ところどころ日本語が思いつかないw

何やるの?

systemdで具体的なエラー内容を見つけるTipsを紹介します。 念のために言っておきますが、必ず見つかるわけではないですw

しかし、低レイヤーのlogを見たり、エスパーして、問題解決するよりもマシ?だと思います。

適当に教える

unitファイルのExecStartをsystemctlを介さずに叩くのです。 環境変数が使用されている場合は、設定ファイルへ探しに出かけましょう。

もうちょっと具体的に

fail2ban起動時に実際にエラーを起こして、エラー退治に行きましょう。 すみませんが、fail2banの説明とインストール手順は、割愛します。 ちなみに、筆者は、fail2banを本番導入してますが、こだわりは特にないですw

fail2ban:http://www.fail2ban.org/wiki/index.php/Main_Page

はい、スタート。 はい。こんな感じでエラー経験しますよね。はい。

$ systemctl start fail2ban
Job for fail2ban.service failed because the control process exited with error code. See "systemctl status fail2ban.service" and "journalctl -xe" for details.

で、指示通り。エラーを見ます。はい。

journalctl -ex  
Aug 30 23:02:32 host[1]: fail2ban.service failed.
Aug 30 23:02:32 host[1]: fail2ban.service holdoff time over, scheduling restart.
Aug 30 23:02:32 host[1]: start request repeated too quickly for fail2ban.service
Aug 30 23:02:32 host[1]: Failed to start Fail2Ban Service.
$ systemctl status 
Aug 30 23:02:32 iscsi.st.ie.u-ryukyu.ac.jp systemd[1]: fail2ban.service holdoff time over, scheduling restart.
Aug 30 23:02:32 iscsi.st.ie.u-ryukyu.ac.jp systemd[1]: start request repeated too quickly for fail2ban.service
Aug 30 23:02:32 iscsi.st.ie.u-ryukyu.ac.jp systemd[1]: Failed to start Fail2Ban Service.
Aug 30 23:02:32 iscsi.st.ie.u-ryukyu.ac.jp systemd[1]: Unit fail2ban.service entered failed state.
Aug 30 23:02:32 iscsi.st.ie.u-ryukyu.ac.jp systemd[1]: fail2ban.service failed.

いや。でも。でも。エラー内容が抽象的すぎw

それから、

tail -f  /var/log/fail2ban.log 

とかやると思いますが、これでもわかりません。

そんなわけで、unitファイルに行きましょう!

$ systemctl cat fail2ban
# /usr/lib/systemd/system/fail2ban.service
[Unit]
Description=Fail2Ban Service
Documentation=man:fail2ban(1)
After=network.target iptables.service firewalld.service firewalld.service

[Service]
Type=forking
ExecStart=/usr/bin/fail2ban-client -x start
ExecStop=/usr/bin/fail2ban-client stop
ExecReload=/usr/bin/fail2ban-client reload
PIDFile=/var/run/fail2ban/fail2ban.pid
Restart=always

[Install]
WantedBy=multi-user.target

よっしゃ、環境変数がない!:) ExecStartを実行ですよ。うん。こうゆう感じです。

$ /usr/bin/fail2ban-client -x start
ERROR  Failed during configuration: File contains no section headers.
file: /etc/fail2ban/jail.d/jail.local, line: 27
'enabled = true  

来た!最高ですね!/etc/fail2ban/jail.d/jail.localの27行目がおかしいそうです。

ちょっと、はしょりますが、

これで、無事、直りました。 そんなわけで、めでたしめでたし!

最後に

もっと頭の切れたやり方が、あればコメントでもしてもらえると幸いです。 某大学の情報学科でもapacheのエラー箇所が分からないなどの話が横行しています。 そんな時、お勧めではないでしょうか?