第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で動作を確認しています。