crontabでnanoではなくviを使うには


最近会社で聞かれて答えたことをまとめてみました。

客先サーバーで"crontab -e"を使おうとしたら、いつもとは違う編集画面が表示された。いつもの編集画面を表示するにはどうすればいいか。

いつもの編集画面とは"vi"のことで、今回の編集画面は"nano"です。今回のサーバーはOS部分を客先が構築しているため、弊社導入アプリケーション以外の設定を変更したくないという状況です。

実は、一時的に変更する方法を会社で試してもらいましたが、うまく動作しませんでした。そのため、その場は"nano"で編集してもらいました。後でテスト環境下で試したところ、うまく動くことが確認できたので、コマンド(環境変数名の指定)を間違えていたのだろうか。

OS環境

対象サーバーのOSはDebianでした。Debianのバージョンは"/etc/debian_version"に書かれているようです。会社では即答できなかったので、その時のバージョンは不明です。

以下は"docker run -it --rm debian /bin/bash"の環境下で試しています。"cat /etc/debian_version"を試すと"11.2"となっていました。

準備

cronとvimとnanoが動作する必要があります。また、説明上"man"も使っています。そのため、以下のコマンドを実行しています。

apt-get -qq update
apt-get -qq install cron vim nano man less

初回動作

crontab を初めて起動すると、このようになります。

root@614feb1aec10:/# crontab -e
no crontab for root - using an empty one

Select an editor.  To change later, run 'select-editor'.
  1. /bin/nano        <---- easiest
  2. /usr/bin/vim.basic

Choose 1-2 [1]:

"使用するエディタを選択してください"という状況です。ここでは"nano"を選択しておきます。

"nano"を選択すると、次回以降はエディタ選択の画面にはなりません。"nano"を使用した編集画面が表示されます。

設定を変更する方法

会社で聞かれたケースでは、設定変更しない前提でした。設定変更してよい場合はどうすればいいでしょうか。

前節では、初回動作の動きを説明しました。そのメッセージをよく読むと書いてあります。コマンド"select-editor"を使用すると、初回起動同様、エディタ選択の画面が表示されます。

設定を変更しない方法

設定を変更しない方法のヒントは、"man crontab"に記載されています。該当部分を抜粋します。

The -e option is used to edit the current crontab using the editor specified by the VISUAL or EDITOR environment variables. After you exit from the editor, the modified crontab will be installed automatically. If neither of the environment variables is defined, then the default editor /usr/bin/editor is used.

環境変数VISUALあるいはEDITORを変更することでエディタを切り替えられること、変数設定がない場合には"/usr/bin/editor"が使用されることが書かれています。"ls -l /usr/bin/editor"を見てみると少し理解が深まると思います。

環境変数を一時的に変更しながら"crontab -e"を起動すれば、viで実行できます。

コマンド単独で環境変数を変更するなら、以下のコマンドです。

EDITOR=vi crontab -e

あるいは、SSHセッション単位で環境変数を変更する、logoutで元通りだから気にしなくていい、というなら、以下のコマンドです。

export EDITOR=vi
crontab -e

雑感

"crontab"の基本的な質問を受けると、"crontab -r"対策が必要ではないだろうかという不安がよぎります。