この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
はじめに
パネポン対戦者絶賛募集中の横山です。
本日は起動スクリプトで嵌った時のメモです。
検証していたOSはAmazon Linux 2014.09です。
発端
「https://github.com/treasure-data/omnibus-td-agent」こちらのインストール手順まとめてました。 t2.microだとメモリ不足でt2.small以上じゃないとビルド出来ないなーと思いつつ、rpmの作成までいき、rpmを使いインストールしました。
あとは、起動&停止確認したらまとめよう!と思ったら…
$ sudo service td-agent start
$
…はて?いつもなら [ OK ] もしくは [ FAILED ] の文字が出るのに何も出ない…どういうことだ?
調査
とりあえずshell bangに #!/bin/bash -xv を入れて起動すると、
$ sudo service td-agent start
#!/bin/bash -xv
#
# /etc/rc.d/init.d/td-agent
#
# chkconfig: - 80 20
# description: td-agent
# processname: td-agent
# pidfile: /var/run/td-agent/td-agent.pid
#
### BEGIN INIT INFO
# Provides: td-agent
# Default-Stop: 0 1 6
# Required-Start: $local_fs
# Required-Stop: $local_fs
# Short-Description: td-agent's init script
# Description: td-agent is a data collector
### END INIT INFO
set -e
+ set -e
# Source function library.
. /etc/init.d/functions
+ . /etc/init.d/functions
# -*-Shell-script-*-
#
# functions This file contains functions to be used by most or all
# shell scripts in the /etc/init.d directory.
#
TEXTDOMAIN=initscripts
++ TEXTDOMAIN=initscripts
# Make sure umask is sane
umask 022
++ umask 022
# Set up a default search path.
PATH="/sbin:/usr/sbin:/bin:/usr/bin"
++ PATH=/sbin:/usr/sbin:/bin:/usr/bin
export PATH
++ export PATH
# Get a sane screen width
[ -z "${COLUMNS:-}" ] && COLUMNS=80
++ '[' -z '' ']'
++ COLUMNS=80
[ -z "${CONSOLETYPE:-}" ] && CONSOLETYPE="$(/sbin/consoletype)"
++ '[' -z '' ']'
/sbin/consoletype)"
/sbin/consoletype)
/sbin/consoletype
+++ /sbin/consoletype
++ CONSOLETYPE=pty
[ -z "${CONSOLETYPE:-}" ] && CONSOLETYPE="`/sbin/consoletype`"
で止まってることがわかりました。
でも同様に /etc/init.d/functions を使ってる、httpdの起動スクリプトは正常に起動できることが確認出来ました。
そこで2つの起動スクリプトのdiffを取ってみると
set -e
このコマンド、exit codeが0以外ですとスクリプト途中で止めてくれるものらしいです。
ここで先ほど止まったコマンドのexit codeを調べてみると…
$ /sbin/consoletype
pty
$ echo $?
2
となるので、ご親切に set -e の機能でシェルの実行を途中止めているみたいです。
とりあえず、 set -e をコメントアウトして実行したらサービスの起動を確認出来ました。
まとめ
起動スクリプトが動かない原因もそうですが、コマンドとして set -eがあることを初めて知りました。
RedHatやCentOSで起動するのに、Amazon Linuxでは起動しないとかある場合、もしかしたらこれが原因かも知れません。