У меня очень простой сценарий 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
Вы не указали ошибку. Я подозреваю, что ваша проблема заключается в том, что вы используете «судо» в поваренной книге. Вы забываете, что шеф-повар работает как root ... –
Можете ли вы предоставить журналы или выходные данные, когда шеф-повар пытается запустить jboss. –
@ MarkO'Connor: я удалил команду sudo в обновленном скрипте. Сама услуга должна работать как пользователь jboss. Может быть, это как-то связано с тем, почему он висит? – Naijaba