systemctl reload vsftpd しようとしたら Failed to reload vsftpd.service: Job type reload is not applicable for unit vsftpd.service. エラーで怒られた

現象

/etc/vsftpd.conf を編集した後、 systemctl reload httpd のように systemctl reload vsftpd しようとしたのですが、以下のエラーで怒られてしまいました。

Failed to reload vsftpd.service: Job type reload is not applicable for unit vsftpd.service. See system logs and ‘systemctl status vsftpd.service’ for details.

systemctl reload httpd はできるのに、 systemctl reload vsftpd はできないようです。

調査

調べてみたところ、起動スクリプトに記述があるかどうかで挙動が変わるようです。

httpd.service

# less /lib/systemd/system/httpd.service


## 略
systemctl reload vsftpd しようとしたら Failed to reload vsftpd.service: Job type reload is not applicable for unit vsftpd.service. エラーで怒られた
[Service]
Type=notify
EnvironmentFile=/etc/sysconfig/httpd
ExecStart=/usr/sbin/httpd $OPTIONS -DFOREGROUND
ExecReload=/usr/sbin/httpd $OPTIONS -k graceful

## 略

vsftpd.service

# less /lib/systemd/system/vsftpd.service


## 略

[Service]
Type=forking
ExecStart=/usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf

## 略

確かに、 vsftpd.service には ExecReload の指定がありません。

対処

そこで以下のように ExecReload を足してみました。

# vi /lib/systemd/system/vsftpd.service


## 略

[Service]
Type=forking
ExecStart=/usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf
ExecReload=/bin/kill -HUP $MAINPID   # 追記

## 略

これで restart とかしてみましょうか。

# systemctl restart vsftpd
Warning: vsftpd.service changed on disk. Run 'systemctl daemon-reload' to reload units.

起動スクリプトが書き換えられたことで警告を発せられてしまいました。検索すると systemctl daemon-reload でデーモンのリロードをすると良いとのことだったので実施。

# systemctl daemon-reload
# systemctl restart vsftpd
#

OK。怒られずに済みました。

検証

これで準備が整ったので動作を検証します。

# vi /etc/vsftpd.conf


## 略

#force_dot_files=YES  ## あえてコメントアウト

## 略

一部の設定を無効にして

# systemctl reload vsftpd
#

リロード。これでFTP接続をして、 .htaccess などのドット始まりのファイルが表示されなくなったことを確認。

# vi /etc/vsftpd.conf


## 略

force_dot_files=YES  ## コメントアウトを解除

## 略

今度は元に戻します。

# systemctl reload vsftpd
#

これでFTP再接続して再びドット始まりのファイルが表示されるようになったことを確認。

意図した挙動が実現できました。

備考

/etc/vsftpd/user_list/etc/vsftpd/user_conf/USERNAME といったユーザに関する設定は reloadrestart せずとも有効になるようです。

参考

Failed to reload vsftpd.service: Job type reload is not applicable for unit vsftpd.service. エラーについて

ExecReload の指定

設定するファイルについて

Warning: vsftpd.service changed on disk. Run 'systemctl daemon-reload' to reload units. の警告について

この記事を書いた人

アルム=バンド

フロントエンド・バックエンド・サーバエンジニア。LAMPやNodeからWP、Gulpを使ってejs,Scss,JSのコーディングまで一通り。たまにRasPiで遊んだり、趣味で開発したり。