小ネタ。アップデートの際など、mastodonユーザーで作業中にユーザーを切り替えてsystemctl restart mastodon-*
するのは面倒なので、mastodonユーザーが実行できる専用のコマンドmastodon_ctl
を作って再起動できるようにします。
準備
シェルスクリプトmastodon_ctl
を作成する
以下の内容のファイルをmastodon_ctl
という名前で保存して、/usr/local/bin
に移動しておきます。
#!/bin/bash declare -A TARGETS=( ["web"]="mastodon-web.service" ["sidekiq"]="mastodon-sidekiq.service" ["streaming"]="mastodon-streaming.service" ) declare -A targets cmd="$1" params=(${@:2:$#}) if [[ ${#params[@]} -eq 0 ]]; then params+=("web" "sidekiq" "streaming") fi for param in ${params[@]} do if [[ "${TARGETS[${param}]+_}" == "_" ]]; then targets[${param}]="${TARGETS[${param}]-_}" else echo "Invalid target." echo "Please list one or more:(${!TARGETS[@]})" exit fi done case $cmd in "start") systemctl start "${targets[@]}" ;; "stop") systemctl stop "${targets[@]}" ;; "restart") systemctl restart "${targets[@]}" ;; "status") systemctl status "${targets[@]}" ;; *) echo "Usage: mastodon_ctl start|stop|restart|status [web] [sidekiq] [streaming]" ;; esac
間違ってroot以外で実行してもエラーになって誰も嬉しくないので、 所有者をrootに、実行権限を所有者にだけ付けておきましょう。
chown root:root /usr/local/bin/mastodon_ctl chmod 744 /usr/local/bin/mastodon_ctl
mastodonユーザーにsudo mastodon_ctl
を許可する
visudo
で/etc/sudoers
を編集します。
以下の記述を追加。
mastodon ALL=NOPASSWD: /usr/local/bin/mastodon_ctl
mastodonユーザーに、パスワード無しで、/usr/local/bin/mastodon_ctl
の実行を許可する、という設定です。
このように、sudoは、何でもできる権限を与える代わりに、特定のユーザーに特定のコマンドだけを許可することが可能ですので覚えておきましょう。
使い方
mastodonユーザーで作業している時に、mastodon_ctl
コマンドが使えるようになっています。
Mastodonのプロセスを一括で再起動したい時は、下記のように呼び出します。
sudo mastodon_ctl restart
mastodon-web.service(WebUIやAPIを受け持っているpuma)だけ再起動したい場合は、webと指定します。
sudo mastodon_ctl restart web
動作には、start, stop, restart, status を指定できます。 対象には、web, sidekiq, streaming を指定できます。省略すると3つ全てが対象になります。
よっしゃ、これでユーザー切り替えずに簡単に再起動できるようになったぞ! うん、まぁ、便利かな……。
(何度も実行する反復作業を簡単にするためなら手間暇かけちゃうヤツ、プログラマの三大美徳「怠惰」であります)
bashのブレース展開を便利に使う
小ネタついでに。
mastodon-*
の代わりにmastodon-{web,sidekiq,streaming}
を使う
systemctl
でmastodon-*
って指定した時に、mastodon-web、mastodon-sidekiq、mastodon-streamingをいっぺんに対象にできるの便利なんですが、これが出来るのってそれぞれが動いている時だけなので、systemctl start mastodon-*
ってやっても動かないんですよね、まだどれも実行されてないので。仕組みがよくわかってないと、なんで動かないんだろうってハマるところです。
なので、ブレース展開を使いましょう。
ブレースというのは囲むのに使っている{
と}
の波括弧のことね。
カンマ区切りで並べると、それぞれ展開されます。
mastodon-{web,sidekiq,streaming}
と書くと、mastodon-web mastodon-sidekiq mastodon-streaming
と書いたのと同じになります。
深いディレクトリにあるファイルの名前を変える
例えば/home/mastodon/live/
にある.env.production.sample
を.env.production
に変更するのに、普通はこう書くじゃないですか。
sudo mv /home/mastodon/live/.env.production.sample /home/mastodon/live/.env.production
ちょこっと変更するだけなのに何度もディレクトリ名を指定するのは激しく面倒くさいので、こうします。
sudo mv /home/mastodon/live/.env.production{.sample,}
ブレース展開で、違うところだけ指定するワケです。
.sample
と空文字を並べて、.sample
を除去しちゃう。