第 8 回 kintone コマンドラインツール(cli-kintone v0)のバックアップ処理を定期実行してみよう
このチュートリアルは ver. 0.x.x の cli-kintone の使い方を紹介しています。
ver.1.0.0 以降の cli-kintone の使い方を紹介するチュートリアルは次のページを参照してください。
はじめよう cli-kintone
はじめに
こんにちは、前回は第 6 回での操作をシェルスクリプト化しました。
今度は前回作成したシェルスクリプト「kintone-backup.sh」を定期的に実行させるため、Mac 環境では「Launchd」を、Cygwin および Linux 環境では「cron」を設定していきます。
また、定期実行と合わせて、エラーログを出力できるようにシェルスクリプトを編集していきます。
処理をスケジューリングする
各環境ごとに準備が異なるため、まずはそれぞれの環境で準備をしましょう。
macOS の設定
ここでは Launchd を利用した定期実行設定の概略を参考として紹介します。
はじめに、実行内容を XML で指定する launchd.plist を作成します。
ファイル名は任意に決めて問題ありませんが、今回は「kintone-backup.daily.plist」というファイル名で作成します。
以下、毎月 10 日の 11 時 00 分にバックアップを実行する場合の例です。
|
|
以下のパスは「kintone-backup.sh」へのパスに置き換えてください。
|
|
「kintone-backup.daily.plist」の編集が終わったら、下記ディレクトリーに配置します。
|
|
配置が完了したら、launchd に作成したファイルを登録します。
|
|
ここまでで定期実行の設定は完了です。
ここでは概略のみ説明しましたが、 launchd.plist 作成方法の詳細は 公式ドキュメント を参照してください。
Cygwin
Cygwin 上で cron を使う場合、cygrunsrv
というコマンドを Cygwin 上で実行します。
cron
や cygrunsrv
コマンドが入っていない場合は Cygwin の「setup.exe」から追加インストールしてください。
このとき Cygwin の bash は Windows の管理者権限で実行する必要があります。
|
|
これで OS の起動時に自動で cron サービスが実行されます。手動で cron を開始したい場合は末尾に -t manual
をつけて実行してください。
手動で cron を起動する場合は、次のコマンドを実行します。
|
|
Linux
Linux では各ディストリビューションで状況が異なります。
ここでは執筆時点での最新版(Cent OS7、RHEL7 以降および Ubuntu v15.04 以降)での設定方法を紹介します。
それ以前のバージョンの場合は実行方法が異なるので、必要に応じてそれぞれ調べてください。
これらの OS の場合は Systemd を利用しているので、systemctl コマンドで crond サービスを起動します。
この操作にはスーパーユーザ権限が必要です。
次のどちらかを実施してから、コマンドを実行してください。
- root ユーザで実行する。
- コマンドを実行する一般ユーザーに root 権限を付与する。
権限を付与するには、システム管理者にvisudo
コマンドを使って現在のユーザを「/etc/sudoers」へ追加してもらった上で、sudo
をつけます。
|
|
システムの起動時サービスを起動するには、次のコマンドを実行します。
一般ユーザで実行する場合はさきほどと同様に sudo
をつけて実行します。
|
|
サービスの実行状態は、下記コマンドで確認できます。
|
|
cron ジョブの追加
Mac 以外を利用している方は cron の設定をしていきましょう。
cron で定期実行されるタスク(スクリプト)は「ジョブ」と呼ばれます。実行対象となるジョブの一覧を編集するには、次のコマンドを実行します。
|
|
このとき、crontab は環境変数 EDITOR
に格納されているパスのコマンドラインエディタを利用します。
定期実行ジョブの編集を始める前に、コマンドラインエディタについて確認してみましょう。
環境変数 EDITOR の設定
cron ジョブの編集に使用するエディタは、下記コマンドを実行して設定できます。
|
|
コマンドラインで使えるエディタには nano、Emacs や Vim などありますが、今回は Vim の利用を想定して説明しています。
もし Vim がインストールされていない場合は、Vim をインストールしておいてください。
また、他のエディタを使いたい方は、次の要領で環境変数を設定してください。
|
|
Vim の操作
Vim はノーマルモード/挿入モード/選択モードの 3 つのモードがあるエディタです。
基本操作
起動時の Vim はノーマルモードになっています。
I
キーでカーソルの左側からの挿入モードへ切り替え、A
キーでカーソルの右側からの挿入モードへ切り替えが可能です。
挿入モードからは Esc
キーや Ctrl+[
でノーマルモードへ切り替えられます。
ノーマルモードでは矢印キーか、H
J
K
L
キーでそれぞれ左/下/上/右へのカーソル移動が可能です。
この他のキー(あるいはキーの組み合わせ)にもいろいろな機能が割り当てられているので、
Vim Cheat Sheet
などで覚えると便利です。
コマンド実行モードとショートカット
ノーマルモードでは、:
で始めると、コマンドを入力・実行できる機能があります。
挿入モードでは Vim 特有のショートカットによる機能(キーバインド)を利用できます。
ファイルの保存と Vim の終了
ファイルを開くときはノーマルモードで :e ファイルへのパス
を入力してから Enter キーで確定し、保存するときは :w
を入力してから Enter キーで確定します。
終了するときはノーマルモードで :q
で終了できます。
cron 設定の書き方
cron で定期実行するジョブの一覧を編集するには、下記コマンドを実行します。
|
|
このまま実行すると作業しているユーザがジョブの実行ユーザになります。
ジョブを実行するユーザを指定するには、次のコマンドを実行します。
|
|
cron の設定は各行ごとにスペース区切りで書きます。
Vim を使う場合は、目的の位置にカーソルを移動した後、i
または a
で挿入モードに移行しましょう。
|
|
曜日は 0 〜 6 までの数字で表現します。
日曜始まりなので、日曜日が 0 で、月曜日が 6 です。
また、このとき設定しない項目は *
で埋めます。
たとえば、毎月 10 日の 11 時 00 分に「kintone-backup.sh」を実行する場合、次のように記述します。
|
|
/path/to/kintone-backup.sh
の部分は「kintone-backup.sh」へのパスに置き換えてください。
設定を書き終えたら、次の順に操作して、ファイルの保存と Vim の終了を実施します。
Esc
またはCtrl-[
でノーマルモードに移行する。:w
でファイルを保存する。:q
で Vim を終了する。
実行時のエラーログ
自動で実行されるのはうれしいですが、シェルスクリプトの実行に成功したか失敗したかなどの情報が確認できないと、運用時に困ることがあります。
そこで、簡易的にエラーログを出力できるよう、シェルスクリプトを編集していきましょう。
シェルスクリプトの処理の内容については
第 7 回 を参照してください。
シェルスクリプトファイルを編集した場合、 処理をスケジューリングする で設定したパスにシェルスクリプトを再配置することを忘れないようにしましょう。
エラーロギングの準備
まず、エラーが発生したらシェルスクリプトを中断するようにします。
bash の -e
オプションをつけた状態でシェルスクリプトを実行すると、実行後ステータスが「0」でない場合、つまりコマンド実行が失敗したらシェルスクリプトを終了できます。
そのため、 第 7 回 で宣言した shebang を次のように書き換えます。
|
|
次に、エラーログを記録するファイルのパスを変数に格納します。
|
|
実行日時の印字
実行日をわかるようにするため、ログの頭に date
コマンドを使って日付を印字します。
|
|
エラー出力のリダイレクト
エラー出力にはシェルのリダイレクト機能を利用します。
2> ファイル名
というように出力先を変更すると、エラー出力のみを指定のファイルに書き出すことができます。これを利用して簡易的なエラーログのしくみを実装します。
2>>
という形にすれば、エラーメッセージをファイルに追記する形でリダイレクトしてくれるので、こちらも使います。
パイプライン処理がない場合
今回はレコードの cli-kintone を実行するたびにエラーログを出力するように変更します。
パイプライン処理をしていない実行コマンドの場合は、2>> $errorLog
スクリプトの末尾に追記します。
|
|
この実行コマンドの場合、以下のように書き換えます。
|
|
パイプライン処理がある場合
パイプライン処理のある実行コマンドの場合、cli-kintone の実行コマンドの行の |
の直前に 2>> $errorLog
を追加します。
|
|
この実行コマンドの場合、以下のように書き換えます。
|
|
書き換え後全体のシェルスクリプト
ここまでに紹介してきたエラーログ追加の変更を、シェルスクリプト全体に反映させましょう。
|
|
こうすることで、エラーが発生した場合も途中で処理を中止し、ログを残すことが可能です。
ここではエラーを単一のログファイルに出力していますが、date -I
とコマンド置換を用いてファイル名を決めれば、日付ごとにエラーログを分けることもできますね。
すでに cron や Launchd で定期実行の設定をしているので、今回はこれで完了です。
動作確認は、設定日時まで待つか、一時的に実行時刻を 5 分後などに設定して行うとよいでしょう。
まとめ
以上で第 8 回は終了です。
難しいコマンドライン操作でしたが、いかがでしたか?
次回もお楽しみに。
この Tips は、cli-kintone ver 0.10.2 と 2020 年 3 月版 kintone で動作を確認しています。