デーモン化してるHubotが何故か勝手に落ちてしまう。
Slackと連携させているHubotが何故か勝手に落ちてしまうので、調べてみたのでメモ。
どういうこと?
VPS上にHubotを設置して、Slackと連携させて遊んでました。 デーモン化にはforeverを使っていました。
毎日定期的につぶやいたり、backlogの変更をSlackに通知してくれたり、便利に使っていたのですが、ある日をさかいに勝手に落ちてしまうようになりました。
最初は普通に再起動していたのですが、頻繁に再現するので、調べてみました。
foreverのログを見てみる
$ forever logs info: Logs for running Forever processes data: script logfile data: [0] node_modules/.bin/hubot /home/www/.forever/YABZ.log $ cat /home/www/.forever/YABZ.log [Wed Oct 19 2016 11:19:00 GMT+0900 (JST)] ERROR TypeError: Cannot read property 'name' of undefined at Request.callback (/home/www/hubot/node_modules/superagent/lib/node/index.js:619:12) at /home/www/hubot/node_modules/superagent/lib/node/index.js:795:18 at IncomingMessage.<anonymous> (/home/www/hubot/node_modules/superagent/lib/node/parsers/json.js:16:7) at emitNone (events.js:72:20) at IncomingMessage.emit (events.js:166:7) at endReadableNT (_stream_readable.js:921:12) at nextTickCallbackWith2Args (node.js:442:9) at process._tickCallback (node.js:356:17) error: Forever detected script was killed by signal: SIGKILL
killされちゃってるみたいですね。。。
ググッてみる
ググッてみると同じような症状の人がいるみたい。
error: Forever detected script was killed by signal: SIGKILL - Google 検索
んで、見ていくと、以下のStack Overflowが見つかりました。
なんでも .foreverignore
を作れば治るよ。ということなので、早速作ってみた。
$ cd /home/hubot/ $ ls -al drwxrwxr-x 5 www www 4096 10月 24 11:01 2016 . drwx------ 8 www www 4096 10月 24 11:58 2016 .. -rw-r--r-- 1 www www 39 5月 20 06:45 2016 .gitignore -rw-rw-r-- 1 www www 11 9月 2 12:21 2016 .hubot_history -rw-r--r-- 1 www www 24 9月 2 12:16 2016 Procfile -rw-r--r-- 1 www www 7820 9月 2 12:16 2016 README.md drwxrwxr-x 2 www www 4096 9月 23 18:24 2016 bin -rw-rw-r-- 1 www www 186 9月 21 18:05 2016 external-scripts.json drwxrwxr-x 190 www www 4096 10月 24 11:45 2016 node_modules -rw-rw-r-- 1 www www 677 9月 25 21:37 2016 package.json drwxrwxr-x 2 www www 4096 10月 24 11:58 2016 scripts $ touch .foreverignore $ ls -al drwxrwxr-x 5 www www 4096 10月 24 11:01 2016 . drwx------ 8 www www 4096 10月 24 11:58 2016 .. -rw-rw-r-- 1 www www 0 10月 24 11:01 2016 .foreverignore <= 追加されてる -rw-r--r-- 1 www www 39 5月 20 06:45 2016 .gitignore -rw-rw-r-- 1 www www 11 9月 2 12:21 2016 .hubot_history -rw-r--r-- 1 www www 24 9月 2 12:16 2016 Procfile -rw-r--r-- 1 www www 7820 9月 2 12:16 2016 README.md drwxrwxr-x 2 www www 4096 9月 23 18:24 2016 bin -rw-rw-r-- 1 www www 186 9月 21 18:05 2016 external-scripts.json drwxrwxr-x 190 www www 4096 10月 24 11:45 2016 node_modules -rw-rw-r-- 1 www www 677 9月 25 21:37 2016 package.json drwxrwxr-x 2 www www 4096 10月 24 11:58 2016 scripts
まだ追加して1日だけど、logで吐いてたエラーも出てないようだし、うまくいってるっぽい。
これでうまくいくといいけどなぁ。。
鍵認証で入れていたSSHが、ある日は入れなくなったとき
鍵認証で入っていたVPSに入れなくなって、さんざん悩んで解決したのでメモ。
どういうこと?
VPSを借りて、ログインには鍵認証を使ってパスワード入力なしで入っていました。 2~3日ぶりにサーバーにログインしようとしたら、パスワード入力のモーダルが出てきました。 変だなと思ったけど、しょうがないからパスワードを入れても、再度ターミナルからパスワード入力をしないと入れない。ってなことがあった。(伝わるかな?)
やったこと
ssh-agentの確認
「ssh-agentに情報を登録しなおしたら入れるよ」というのをどっかで見たので、やってみた。
$ ssh-add -K {鍵の場所} $ ssh-add -l 2048 {鍵情報} (RSA) <= 登録されてる $ ssh {ユーザー}@{URL} {ユーザー}@{URL}'s password: <= だめ・・・
入れない・・・
パーミッション変更
「パーミッションが正しくないと入れないよ」と言われたので、やってみた。
# ローカル $ cd .ssh $ ls -l -rw------- 1 {ユーザー} staff 1.7K 8 26 18:35 id_rsa -rw------- 1 {ユーザー} staff 415B 8 26 18:35 id_rsa.pub
うーん、大丈夫っぽい。
# サーバー $ cd .ssh $ ls -l -rw-------. 1 {ユーザー} {ユーザー} 383 9月 5 11:04 authorized_keys
うーん、大丈夫そう・・・。
結局
サーバーの鍵を削除して、ローカルの鍵を登録しなおしました。
# サーバー $ cd .ssh $ vi authorized_keys 該当する記述を削除
これでサーバはOK
# ローカル $ cd .ssh $ ssh-copy-id -i id_rsa.pub {ユーザー}@{URL} /usr/local/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "id_rsa.pub" /usr/local/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed /usr/local/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys {ユーザー}@{URL}'s password: Number of key(s) added: 1 Now try logging into the machine, with: "ssh '{ユーザー}@{URL}'" and check to make sure that only the key(s) you wanted were added. # 入ってみる $ ssh {ユーザー}@{URL} [{ユーザー}@{URL} ~]$ <= 入れた!!!
こんなに簡単に入れるなら最初からこうしておけばよかった。。。
残念な時間の使い方をしました。。。
VPSにwordpressを入れたらCentOSのスタート画面しか出てこない時ーー
サーバー移転の際、Wordpressを移したのですが、ドメインを叩いてもCent0Sのスタート画面しか出てこなくて涙が出たので、解決したメモ。
どんなエラーが出るの?
サーバーにSSHで接続してエラーログを見ると、以下のように出る。
Options FollowSymLinks and SymLinksIfOwnerMatch are both off, so the RewriteRule directive is also forbidden due to its similar ability to circumvent directory restrictions
どういうことだ???
ググッてみる
ググッてみると同じようなことで解決している記事があったので、そのとおりにやってみる。
なんでも、mod_rewriteを使うディレクトリでは「Options FollowSymLinks」が必要だということらしい。
修正してみよう
.htaccess を修正。
# BEGIN WordPress <IfModule mod_rewrite.c> Options FollowSymLinks <= ここを追加 RewriteEngine On RewriteBase / RewriteRule ^index\.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.php [L] </IfModule> # END WordPress
ここまでやって再度、ページにアクセスすると、今度は問題なくつながった!
.htaccessの仕組みをもうちょっとわからないといけないなぁ。と思った一日でした。
Gulp のインストールでエラーが出た
Gulpを使って開発をしようとしたら、 $ npm install gulp --save-dev
でエラーがでたので、メモ。
どういうこと?
ローカルでGulpを使って開発をしようとしました。 Gulpを使うのが久しぶりだったので、以下の記事を参考にGulpを設定しようとしました。
$ npm init
$ npm install gulp -g
までは問題なく出来ましたが、$ npm install gulp --save-dev
でエラーを吐いて進まなくなりました。
$ pwd /Volumes/MacintochHD/Documents/ $ mkdir gulp $ cd gulp $ npm init npm init This utility will walk you through creating a package.json file. It only covers the most common items, and tries to guess sensible defaults. See `npm help json` for definitive documentation on these fields and exactly what they do. Use `npm install <pkg> --save` afterwards to install a package and save it as a dependency in the package.json file. Press ^C at any time to quit. name: (gulp) version: (1.0.0) description: entry point: (index.js) test command: git repository: keywords: author: license: (ISC) About to write to /Volumes/MacintochHD/Documents/gulp/package.json: { "name": "gulp", "version": "1.0.0", "description": "", "main": "index.js", "scripts": { "test": "echo \"Error: no test specified\" && exit 1" }, "author": "", "license": "ISC" } $ npm install gulp -g $ npm install gulp --save-dev npm ERR! Darwin 14.5.0 npm ERR! argv "/usr/local/Cellar/node/6.7.0/bin/node" "/usr/local/bin/npm" "install" "gulp" "--save-dev" npm ERR! node v6.7.0 npm ERR! npm v3.10.8 npm ERR! code ENOSELF npm ERR! Refusing to install gulp as a dependency of itself npm ERR! npm ERR! If you need help, you may report this error at: npm ERR! <https://github.com/npm/npm/issues> npm ERR! Please include the following file with any support request: npm ERR! /Volumes/MacintochHD/Documents/gulp/npm-debug.log
うーん、どういうことだろう?
原因はpackage.jsonのnameでした。
どうやら、開発用に用意したディレクトリ名が"gulp"だったのが問題らしい。
package.jsonのnameはデフォルトでディレクトリ名を取るらしく、それがgulpだとエラーになるらしい。
なので、package.jsonを修正する。
{ "name": "gulptest", <= gulpから変更 "version": "1.0.0", "description": "", "main": "index.js", "scripts": { "test": "echo \"Error: no test specified\" && exit 1" }, "author": "", "license": "ISC", "devDependencies": { "gulp": "^3.9.1" } }
この状態で再度 $ npm install gulp --save-dev
を実行すると、問題なくインストールできました。
以前、hubotでも同じエラーがあったなぁ。npmだとpackage名と同じ名前をpackage.jsonのnameに指定するとエラーになるみたい。 あとでもうちょっと調べてみよう。
"vagrant up" しようとしたら "version of VirtualBox installed that is not supported" と言われた
Ansibleを試してみようと思い、以下の記事を参考にvagrantで試してみようとした。
boxを用意して、'$ vagrant up' してみました。
$ vagrant up The provider 'virtualbox' that was requested to back the machine 'controller' is reporting that it isn't usable on this system. The reason is shown below: Vagrant has detected that you have a version of VirtualBox installed that is not supported. Please install one of the supported versions listed below to use Vagrant: 4.0, 4.1, 4.2, 4.3
どうやら、virtual boxのバージョンが違うから合わせてくれといっているようだ。
なので、virtual boxのバージョンを上げてみた。
virtual boxは Homebrewで入れているので、ターミナルからおもむろに $ brew cask install virtualbox
としてバージョンをあげてみるがやはり変わらない。
そこで、vagrantの方のバージョンをあげてみる。
$ brew cask install vagrant ==> Downloading https://releases.hashicorp.com/vagrant/1.8.6/vagrant_1.8.6.dmg ######################################################################## 100.0% ==> Verifying checksum for Cask vagrant ==> Running installer for vagrant; your password may be necessary. ==> Package installers may write to any location; options such as --appdir are ignored. ==> installer: Package name is Vagrant ==> installer: Upgrading at base path / ==> installer: The upgrade was successful. 🍺 vagrant was successfully installed!
ここまでやって、ようやくvagrantが立ち上がりました。 さっ、ansibleの勉強しよーっと。
Macで日本語入力ができなくなったけど解決した話
Macで作業中、突然日本語入力ができなくなってしまうことがあり、一応の解決策が見つかったのでメモ。
どういうこと?
Macでアプリを切り替えて作業をしていると、突然日本語入力が出来なくなる。 ちなみに、Google日本語入力を使っています。
- 「英数」「かな」キーを押してみても反応なし。(もしくは、一瞬右上の言語メニューが切り替わるけど、すぐに戻ってしまう。)
- 右上の言語メニューから「ひらがな」を選択しても変化なし。
コード書いてる時ならそこまで困らないが、チャットなどしてる時だと、もう大変。 「nihonngoutenakunarimasita」みたいになってしまう。。
どうやって解決したの?
普段、クリップボード拡張で、Clipyを使っています。 思い返してみると、日本語が入力できなくなった辺りからClipyが反応しなくなってしまった。
これはもしやと思って、Clipyを落としてみた。
/Applications/Utilities/アクティビティモニタ を開き、「Clipy」を探し、"×"アイコンをクリック。
Cipyが落ちたので、日本語入力をやってみると・・・できた!!!!
他のアプリが影響したりしてることもあるけど、今回はこれでうまくいきました。 よかったよかった。。。
Ansibleを使おう
TOC
- 構成管理ツールとは?
- Ansibleとは?
構成管理ツールとは?
サーバーを作成した時など、マニュアル的に実行している処理、手順があると思います。
例えば・・・ - ユーザーを作って - apache入れて - sshの設定して - ディレクトリ作って などなど。
マニュアルを見ながら進めていけば、1度や2度なら問題は起こらないかもしれませんが、それが10回20回・・・となった場合、毎回同じような結果になるといえるでしょうか? (マニュアルをブラッシュアップしろよというツッコミはここでは無視)
そういうときは構成管理ツールを使いましょう。 構成管理ツールを使うと以下のことができるようになります。
- セットアップの自動化(構成管理)
- デプロイメント
- これらの手順を共有できる などなど。
面倒な作業を自動化できるだけでなく、手順をコード化することができます。 しかもそれをチーム内で共有すれば、誰が何度やっても同じ結果が返ってくるようになります。
Ansibleとは?
構成管理ツールには代表的な物がいくつかあります。
- Puppet
- Chef
- Ansible
- Rex
この中で最近人気のある Ansible を使っています。
Ansibleには主に以下の特徴があります。 - エージェントレス - 豊富なモジュール - 冪等性 - シンプルな記述
エージェントレス
- サーバー側に特別なインストール不要
- ローカルにpython2.4+,サーバーにpython2.6+がインストールサれていれば動く
サーバーに勝手にいろいろインストールできないという場合でも、pythonさえあれば動作します。
豊富なモジュール
以下に一例を挙げます。 - yum - git - ファイルのダウンロード - slackに通知を送る などなど。 All Modules — Ansible Documentation
標準でできることが多いので、YAML形式で設定を書いていけばいろいろな機能を使うことができます。
冪等性
Ansibleの特徴に冪等性(べきとうせい)があります。 冪等性とは「ある操作を何度行っても、毎度同じ結果が返ってくる」ということです。
すでに実行したことがある処理を再度実行した場合でも、実行し直すのではなく、状態を見て、適宜スキップしてくれます。
シンプルな記述
Ansibleの設定ファイルは一般的なYAML形式で書かれており、非常にシンプルです。
- name: apacheのインストール apt: pkg=apache2 state=latest - name: MySQLのインストール apt: pkg=mysql-server-5.6 state=present
このように非常にシンプル。
Ansibleを使えば、サーバーの構築はもちろん、Macの環境構築、CMSのセットアップなど多くのことを自動化出来ます。
今回はざっくりとした概要だけで、具体的な使い方は別の記事で紹介したいと思います。