目次
はじめに
こんにちはyanaiです。
アドカレ2024の12月23日を担当させていただきます。
AWSネタでなんかかけることないか探したんですが、全然いいアイデアが浮かばなかったので、今回は自分がよく利用するミドルウェアの設定ファイルの構文エラーがないかチェックしてくれるコマンドをまとめていきます。
それでは、やっていきます。
なお環境については以下OSにOS最新のミドルウェアを導入して確認しています。
OS:AlmaLinux release 9.3 (Shamrock Pampas Cat)
OpenSSH
- 構文チェックのコマンド:
sshd -t
→記載におかしな箇所がなければ、何も出ずに終了します。
おかしな箇所がある場合は下記のような形で、記載ミスの箇所を指摘してくれます。
$ sshd -t
---
/etc/ssh/sshd_config line 21: Badly formatted port number.
---
※こちらはsshdの接続ポートを誤った記載をした際のエラーです。
apache(httpd)
- 構文チェックのコマンド:
apachectl configtest
→記載におかしな箇所がなければ、Syntax OK
と表示されます。
おかしな箇所がある場合は下記のような形で、記載ミスの箇所を指摘してくれます。
$ apachectl configtest
---
AH00526: Syntax error on line 122 of /etc/httpd/conf/httpd.conf:
DocumentRoot '/var/www/html/public' is not a directory, or is not readable
---
※こちらは存在しないディレクトリをdocumentrootに記載した際のエラーです。
nginx
- 構文チェックのコマンド:
nginx -t
→記載におかしな箇所がなければ、
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
と表示されます。
おかしな箇所がある場合は下記のような形で、記載ミスの箇所を指摘してくれます。
$ nginx -t
---
nginx: [emerg] BIO_new_file("/etc/pki/nginx/server.crt") failed (SSL: error:02001002:system library:fopen:No such file or directory:fopen('/etc/pki/nginx/server.crt','r') error:2006D080:BIO routines:BIO_new_file:no such file)
nginx: configuration file /etc/nginx/nginx.conf test failed
---
※こちらは存在しないTLS証明書を記載した場合のエラーです。
php-fpm
- 構文チェックのコマンド:
php-fpm -t
→記載におかしな箇所がなければ、[XX-Dec-2024 XX:XX:XX] NOTICE: configuration file /etc/php-fpm.conf test is successful
と表示されます。
おかしな箇所がある場合は下記のような形で、記載ミスの箇所を指摘してくれます。
$ php-fpm -t
[XX-Dec-2024 XX:XX:XX] ERROR: failed to open error_log (/var/log/error/php-fpm.log): No such file or directory (2)
[XX-Dec-2024 XX:XX:XX] ERROR: failed to post process the configuration
[XX-Dec-2024 XX:XX:XX] ERROR: FPM initialization failed
※こちらは存在しないログファイルを記載した場合のエラーです。
postfix
- 構文チェックのコマンド:
postfix check
→記載におかしな箇所がなければ、そのまま終了します。
おかしな箇所がある場合は下記のような形で、記載ミスの箇所を指摘してくれます。
$ postfix check
postfix: fatal: file /etc/postfix/main.cf: parameter mydomain: bad parameter value: test.jp The myorigin parameter specifies the domain that locally-posted mail appears to come from. The default is to append server.test.jp
※こちらは誤ってmydomainを記載した場合のエラーです。
なおpostconf -n
のコマンドを打つと、main.cfで有効化されている設定の一覧が出力されるので合わせて確認するのがいいかと思います。
MySQL
- 構文チェックのコマンド:
mysqld --validate-config
→記載におかしな箇所がなければ、そのまま終了します。
おかしな箇所がある場合は下記のような形で、記載ミスの箇所を指摘してくれます。
$ mysqld --validate-config
2024-12-22T22:42:13.273191+09:00 0 [ERROR] [MY-000067] [Server] unknown variable 'query_log_file=/var/lib/mysqld/slow.log'.
2024-12-22T22:42:13.273226+09:00 0 [ERROR] [MY-010119] [Server] Aborting
※こちらは誤ってquery_log_fileという不明なパラメータを記載した場合のエラーです。
HAProxy
- 構文チェックのコマンド:
haproxy -f /etc/haproxy/haproxy.cfg -c
※"/etc/haproxy/haproxy.cfg"についてはhaproxy.cfgのパスに合わせてご設定下さい。
→記載におかしな箇所がなければ、Configuration file is valid
と表示されます。
おかしな箇所がある場合は下記のような形で、記載ミスの箇所を指摘してくれます。
$ haproxy -f /etc/haproxy/haproxy.cfg -c
[ALERT] 356/230505 (40135) : parsing [/etc/haproxy/haproxy.cfg:27] : unknown keyword 'error_log' in 'global' section
[ALERT] 356/230505 (40135) : Error(s) found in configuration file : /etc/haproxy/haproxy.cfg
[ALERT] 356/230505 (40135) : Fatal errors found in configuration.
※こちらは誤ってerror_logという不明なパラメータを記載した場合のエラーです。
最後に
設定ファイルの構文チェックのコマンドをまとめていきましたが、何かにつけて変更を加える際は必ずバックアップを取る、diffコマンドで差分を確認するなど変更点を明確に確認するのが良いかと思います。
年末の休みが近づき少し気が緩んでくるこの時期、サーバの変更を加える際は構文チェックを忘れないように努めていきたいものですね。
最後まで読んで頂いてありがとうございました。
それでは~
ディーネット構築担当のエンジニアです。