Ubuntu 厨师长+;自定义系统脚本

Ubuntu 厨师长+;自定义系统脚本,ubuntu,jboss,chef-infra,systemd,Ubuntu,Jboss,Chef Infra,Systemd,我在Ubuntu 12.04上有一个非常基本的JBoss systemd脚本。我能够通过“sudo服务jboss start”或“sudo/etc/init.d/jboss start”成功运行它。我不能让这个和厨师一起工作。我原以为这会很简单: service "jboss" do action [ :start ] end 但是不行。我试过: service "jboss" do supports :start => true, :stop => true, :

我在Ubuntu 12.04上有一个非常基本的JBoss systemd脚本。我能够通过“sudo服务jboss start”或“sudo/etc/init.d/jboss start”成功运行它。我不能让这个和厨师一起工作。我原以为这会很简单:

service "jboss" do
    action [ :start ]
end
但是不行。我试过:

service "jboss" do
    supports :start => true, :stop => true, :status => false
    action [ :start, :enable ]
    start_command "sudo /etc/init.d/jboss start"
end
还有不同的排列

谢谢你的帮助,下面是我的systemd脚本

#!/bin/bash
### BEGIN INIT INFO
# Provides:          jboss
# Required-Start:    $local_fs $remote_fs $network $syslog
# Required-Stop:     $local_fs $remote_fs $network $syslog
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Start/Stop JBoss AS v7.0.0
# Usage: this file neeed to be renamed jboss
### END INIT INFO


#
#source some script files in order to set and export environmental variables
#as well as add the appropriate executables to $PATH
[ -r /etc/profile.d/java.sh ] && . /etc/profile.d/java.sh
[ -r /etc/profile.d/jboss.sh ] && . /etc/profile.d/jboss.sh

case "$1" in
    start)
        echo "Starting JBoss AS 7.1.1"
        cd /home/jboss/jboss-as-7.1.1.Final/bin/
        sudo -u jboss ./standalone.sh &
    ;;
    stop)
        echo "Stopping JBoss AS 7.1.1"
        sudo -u jboss /home/jboss/jboss-as-7.1.1.Final/bin/jboss-cli.sh --connect command=:shutdown
        #JBOSS_PID=$(ps -ef | grep jboss-as-7.1.1.Final | grep -v grep | awk '{print $2}')
        #kill -15 $JBOSS_PID
        #echo "Sig term sent"
        #echo "Terminating all ml_process"
        #pkill -9 ml_server
    ;;
    *)
        echo "Usage: /etc/init.d/jboss {start|stop}"
        exit 1
    ;;
esac
#!/bin/sh
### BEGIN INIT INFO
# Provides:          jboss
# Required-Start:    $local_fs $remote_fs $network $syslog
# Required-Stop:     $local_fs $remote_fs $network $syslog
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Start/Stop JBoss AS v7.0.0
### END INIT INFO


export JAVA_HOME=/usr/lib/jvm/java-7-oracle

#define where jboss is - this is the directory containing directories log, bin, conf etc
export JBOSS_HOME=${JBOSS_HOME:-"/home/jboss/jboss-as-7.1.1.Final"}

#define the user under which jboss will run, or use 'RUNASIS' to run as the current user
export JBOSS_USER=${JBOSS_USER:-"jboss"}

#make sure java is in your path
JAVAPTH=${JAVAPTH:-"$JAVA_HOME/bin/java"}
export PATH=$PATH:$JAVAPTH

#source some script files in order to set and export environmental
#variables
#as well as add the appropriate executables to $PATH
[ -r /etc/profile.d/java.sh ] && . /etc/profile.d/java.sh
[ -r /etc/profile.d/jboss.sh ] && . /etc/profile.d/jboss.sh




case "$1" in
    start)
        echo "Starting JBoss AS 7.0.0"
        cd /home/jboss/jboss-as-7.1.1.Final/bin/
        sudo -u jboss sh ${JBOSS_HOME}/bin/standalone.sh
    ;;
    stop)
        echo "Stopping JBoss AS 7.0.0"
        sudo -u jboss sh ${JBOSS_HOME}/bin/jboss-admin.sh --connect
    command=:shutdown
    ;;
    *)
        echo "Usage: /etc/init.d/jboss {start|stop}"
        exit 1
    ;;
esac

exit 0
更新

感谢那些回复的人。我设法取得了一些进展。我从OpsCode下载了JBoss厨师配方:

事实证明,我的脚本中没有设置JAVA_HOME环境变量。我现在正在使用OpsCode中的启动脚本。JBoss现在从配方开始:

service "jboss" do
  action [ :enable, :start ]
end
但Chef坚持这条线。我认为它正在等待JBoss“完成”,但既然它应该是一个服务,它应该是持久的。如果我SSH到实例中并杀死JBoss,那么Chef菜谱将成功完成。我怎样才能让厨师的食谱正常结束?请参阅下面的更新后的systemd脚本

#!/bin/bash
### BEGIN INIT INFO
# Provides:          jboss
# Required-Start:    $local_fs $remote_fs $network $syslog
# Required-Stop:     $local_fs $remote_fs $network $syslog
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Start/Stop JBoss AS v7.0.0
# Usage: this file neeed to be renamed jboss
### END INIT INFO


#
#source some script files in order to set and export environmental variables
#as well as add the appropriate executables to $PATH
[ -r /etc/profile.d/java.sh ] && . /etc/profile.d/java.sh
[ -r /etc/profile.d/jboss.sh ] && . /etc/profile.d/jboss.sh

case "$1" in
    start)
        echo "Starting JBoss AS 7.1.1"
        cd /home/jboss/jboss-as-7.1.1.Final/bin/
        sudo -u jboss ./standalone.sh &
    ;;
    stop)
        echo "Stopping JBoss AS 7.1.1"
        sudo -u jboss /home/jboss/jboss-as-7.1.1.Final/bin/jboss-cli.sh --connect command=:shutdown
        #JBOSS_PID=$(ps -ef | grep jboss-as-7.1.1.Final | grep -v grep | awk '{print $2}')
        #kill -15 $JBOSS_PID
        #echo "Sig term sent"
        #echo "Terminating all ml_process"
        #pkill -9 ml_server
    ;;
    *)
        echo "Usage: /etc/init.d/jboss {start|stop}"
        exit 1
    ;;
esac
#!/bin/sh
### BEGIN INIT INFO
# Provides:          jboss
# Required-Start:    $local_fs $remote_fs $network $syslog
# Required-Stop:     $local_fs $remote_fs $network $syslog
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Start/Stop JBoss AS v7.0.0
### END INIT INFO


export JAVA_HOME=/usr/lib/jvm/java-7-oracle

#define where jboss is - this is the directory containing directories log, bin, conf etc
export JBOSS_HOME=${JBOSS_HOME:-"/home/jboss/jboss-as-7.1.1.Final"}

#define the user under which jboss will run, or use 'RUNASIS' to run as the current user
export JBOSS_USER=${JBOSS_USER:-"jboss"}

#make sure java is in your path
JAVAPTH=${JAVAPTH:-"$JAVA_HOME/bin/java"}
export PATH=$PATH:$JAVAPTH

#source some script files in order to set and export environmental
#variables
#as well as add the appropriate executables to $PATH
[ -r /etc/profile.d/java.sh ] && . /etc/profile.d/java.sh
[ -r /etc/profile.d/jboss.sh ] && . /etc/profile.d/jboss.sh




case "$1" in
    start)
        echo "Starting JBoss AS 7.0.0"
        cd /home/jboss/jboss-as-7.1.1.Final/bin/
        sudo -u jboss sh ${JBOSS_HOME}/bin/standalone.sh
    ;;
    stop)
        echo "Stopping JBoss AS 7.0.0"
        sudo -u jboss sh ${JBOSS_HOME}/bin/jboss-admin.sh --connect
    command=:shutdown
    ;;
    *)
        echo "Usage: /etc/init.d/jboss {start|stop}"
        exit 1
    ;;
esac

exit 0

在经历了许多挫折之后,我终于让Chef推出了JBoss并坚持使用以下配方:

bash "Start JBoss" do
    cwd "/home/jboss/jboss-as-7.1.1.Final/bin"
    code <<-EOH
    sudo -u jboss start-stop-daemon --start --quiet --background --chdir /home/jboss/jboss-as-7.1.1.Final/bin --chuid jboss --exec /home/jboss/jboss-as-7.1.1.Final/bin/standalone.sh
    EOH
end
bash“启动JBoss”吗
cwd“/home/jboss/jboss-as-7.1.1.Final/bin”

代码在经历了许多挫折之后,我终于能够让Chef启动并坚持JBoss,方法如下:

bash "Start JBoss" do
    cwd "/home/jboss/jboss-as-7.1.1.Final/bin"
    code <<-EOH
    sudo -u jboss start-stop-daemon --start --quiet --background --chdir /home/jboss/jboss-as-7.1.1.Final/bin --chuid jboss --exec /home/jboss/jboss-as-7.1.1.Final/bin/standalone.sh
    EOH
end
bash“启动JBoss”吗
cwd“/home/jboss/jboss-as-7.1.1.Final/bin”

代码您尚未指定错误。我怀疑你的问题是你在食谱中使用了“sudo”。您忘记了chef是以root用户身份运行的……当chef试图启动jboss时,您能提供日志或输出吗。@MarkO'Connor:我在更新的脚本中删除了sudo命令。服务本身应该作为jboss用户运行。也许这与它挂起的原因有关?尝试手动运行
service jboss start
。我想,它应该是叉子,但它不是。如果这是问题所在,那么在jboss开始的那一行末尾添加一个符号
sudo-u jboss sh${jboss_HOME}/bin/standalone.sh&
请不要忘记将答案标记为正确:)您尚未指定错误。我怀疑你的问题是你在食谱中使用了“sudo”。您忘记了chef是以root用户身份运行的……当chef试图启动jboss时,您能提供日志或输出吗。@MarkO'Connor:我在更新的脚本中删除了sudo命令。服务本身应该作为jboss用户运行。也许这与它挂起的原因有关?尝试手动运行
service jboss start
。我想,它应该是叉子,但它不是。如果这是问题所在,那么在jboss开始的那一行末尾添加一个符号
sudo-u jboss sh${jboss_HOME}/bin/standalone.sh&
请不要忘记将答案标记为正确:)