2013-08-29 4 views
1

У меня очень простой сценарий systemd для JBoss на Ubuntu 12.04. Я могу запустить его с помощью «sudo service jboss start» ИЛИ «sudo /etc/init.d/jboss start». Я не могу заставить это работать с шеф-поваром. Я бы подумал, что это будет так же просто, как:Chef + custom systemd script

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 

UPDATE:

Спасибо тем, кто ответил. Мне удалось добиться определенного прогресса. Я загрузил рецепт JBoss Chef из OpsCode: http://community.opscode.com/cookbooks/jboss

Оказывается, что в моем скрипте не была задана переменная окружения JAVA_HOME. Теперь я использую скрипт запуска из OpsCode. JBoss теперь начинается с рецепта:

service "jboss" do 
    action [ :enable, :start ] 
end 

Но шеф-повар висит на этой линии. Я думаю, что он ждет, пока JBoss «закончит», но поскольку он должен быть сервисом, он должен оставаться постоянным. Если я SSH в экземпляр и уничтожу JBoss, рецепт шеф-повара завершится успешно. Как я могу закончить рецепт шеф-повара? Ниже приведен мой обновленный сценарий systemd.

#!/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 
+0

Вы не указали ошибку. Я подозреваю, что ваша проблема заключается в том, что вы используете «судо» в поваренной книге. Вы забываете, что шеф-повар работает как root ... –

+0

Можете ли вы предоставить журналы или выходные данные, когда шеф-повар пытается запустить jboss. –

+0

@ MarkO'Connor: я удалил команду sudo в обновленном скрипте. Сама услуга должна работать как пользователь jboss. Может быть, это как-то связано с тем, почему он висит? – Naijaba

ответ

1

После долгих безуспешных попыток я смог 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 

Огромное спасибо всем, кто помогал и кому написал это: https://github.com/octo-technology/master-chef/blob/master/cookbooks/jboss/templates/default/jboss-as-standalone.sh.erb