# スポットインスタンス再起動時の自動実行 & 通知の方法 スポットインスタンスで学習していると、たびたびサーバーを強制的に落とされてしまい、再起動した後に再び学習スクリプトを回さなければなりません それを自動化する方法を記しました ## サーバー再起動時に学習を勝手に再開するようにする * Linuxサーバーであれば、`/etc/rc.local`というファイルに、起動時に実行して欲しいコマンドを書くことができる * 権限で怒られるので`sudo vi /etc/rc.local`とかで編集する * 例えば`~/stylegan_chainer_docker`ディレクトリで、dockerを使って訓練再開したい場合は下のように書き込めば良い ##### /etc/rc.local ```bash #!/bin/sh -e cd stylegan_chainer_docker docker-compose up -d train exit 0 ``` * -dオプションで作ったコンテナのログは、そのディレクトリに移動した上で`docker-compose logs -f --tail=500 train`みたいにすれば見られる * `--tail`は末尾何行まで表示するか * ちなみにここにすぐには終わらない処理(例えば上で-dを付けない)を書いてしまうと、最悪サーバーが永遠に起動しなくなるので注意 * 一回これをやらかしたが、AWSさんは起動してくれたのでそこのケアはしてくれてそう * 当然だがこれをやるには、学習スクリプトに最新の重みを自動でロードする機能がないといけない ## サーバーの再起動時に新しいIPアドレスをSlackで通知 * いちいちAWSのコンソールを覗かなくて良くなる * スマホにsshクライアントのアプリを入れておけば、出先でパッと再起動時の処理ができる など地味に便利 ### シェルからSlackに通知を送る方法 1. [ここ](https://algoageex.slack.com/apps/new/A0F7XDUAZ--incoming-webhook-)でどのチャンネルにPOSTするか決める -> インテグレーションの追加 2. Webhook URLをコピー 3. 下のcurlでチャンネルに投稿されるはず ```bash $ curl -X POST \ <2でコピーしたURL> \ -H 'Content-type: application/json' \ -d '{"text":"Hello World!"}' ``` ![](https://i.imgur.com/rd95aSt.png) ### 再起動時にIPアドレスを通知 上のcurlを`/etc/rc.local`に追加すれば良い ちなみに`username`や`icon_emoji`で見た目のカスタマイズができる ##### /etc/rc.local ```bash #!/bin/sh -e MESSAGE="Server Restarted!!!" IP=`curl inet-ip.info` # 再起動の通知 curl -X POST \ <webhookのURL> \ -H 'Content-type: application/json' \ -d "{ \"text\":\"${MESSAGE}\", \"username\":\"StyleGan\", \"icon_emoji\":\":sunglasses:\" }" # IPアドレス curl -X POST \ <webhookのURL> \ -H 'Content-type: application/json' \ -d "{ \"text\":\"${IP}\", \"username\":\"StyleGan\", \"icon_emoji\":\":sunglasses:\" }" exit 0 ``` こんな感じの通知が来る :sunglasses: ![](https://i.imgur.com/LE6uL5z.png) ## 参考 * [SlackのIncoming Webhooksを使い倒す](https://qiita.com/ik-fib/items/b4a502d173a22b3947a0) * [linux起動時に自動的に実行するコマンド(プログラム)の設定](https://qiita.com/hnishi/items/6a5b8b67d807f8dfe44e)