为Amazon Linux AMI添加服务启动脚本

7

我正在使用一个Amazon Linux AMI,并对其进行一些自定义修改(添加了一个axis2server等),并将其保存为新的AMI。 现在我想要做的是,当AMI启动时,启动axis2server(即在实例启动时axis2server应自动启动)。 为此,我使用了以下类似的init脚本,并运行了以下命令:

chkconfig --add axisservice

但是当我从镜像启动新实例时,axis2server不会启动。

我只需要在启动时执行脚本/home/ec2-user/axis2-1.6.1/bin/axis2server.sh。这里是否有遗漏的地方?

#! /bin/sh
# Basic support for IRIX style chkconfig
###
# chkconfig: 235 98 55
# description: Manages the services you are controlling with the chkconfig command
###

case "$1" in
  start)
        echo -n "Starting axisservice"        
        touch ~/temp.txt
        cd /home/ec2-user/axis2-1.6.1/bin
        ./axis2server.sh &
        echo "."
        ;;
  stop)
        echo -n "Stopping axisservice"
        echo "."
        ;;

  *)
        echo "Usage: /sbin/service axisservice {start|stop}"
        exit 1
esac

exit 0

我也阅读了https://help.ubuntu.com/community/CloudInit,它提供了一种名为User-Data Scripts的机制,用户可以在启动脚本时执行脚本。

$ euca-run-instances --key mykey --user-data-file myscript.sh ami-axxxx

这是一个命令行选项,我希望的是,当通过用户界面启动实例时,脚本应该被启动。因此,我认为上述选项在我的情况下无法使用。如果我错了,请纠正我。
谢谢, H.

仅仅为了检查最基本的问题,这个脚本是否有正确的权限在启动时运行?你尝试手动运行它了吗? - Frodo Baggins
你找到解决方案了吗?我也想在我的实例重新启动时运行Redis服务器和node.js。看起来Amazon AMI在这里没有安装update-rc.d。 - user482594
1个回答

3
我猜测环境没有正确设置。这意味着你的 shell 脚本尝试启动另一个程序,但找不到它。
首先,我建议调整你脚本中的 `start` 部分(当前的):
echo -n "Starting axisservice"        
touch ~/temp.txt
cd /home/ec2-user/axis2-1.6.1/bin
./axis2server.sh &
echo "."

编辑:

echo -n "Starting axisservice"        
touch ~/temp.txt
cd /home/ec2-user/axis2-1.6.1/bin
./axis2server.sh
RETVAL=$?
[ $RETVAL -eq 0 ] && echo Success
[ $RETVAL -ne 0 ] && echo Failure
echo "."

那么我做了什么?

  • 删除了&,以便脚本等待您的shell脚本(axis2server.sh)完成
  • 检查了您的shell脚本的返回状态($?

进一步调试:

在您的脚本中添加set -x以启用跟踪并记录stderrstdout

问题:

  1. 您是否知道您服务脚本中的stop没有任何作用?
  2. touch ~/temp.txt是否应该创建/root/temp.txt?(我猜测root运行此脚本。)
  3. 如果我的建议都不起作用,您能分享axis2server.sh并粘贴stderrstdout吗?

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接