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のエラー箇所が分からないなどの話が横行しています。 そんな時、お勧めではないでしょうか?