Criar serviço a partir do comando [closed]

1

Eu tenho o seguinte comando que tento configurar para ser executado na inicialização:

su -l hive -c "nohup hive --service metastore > /var/log/hive/hive.out 2> /var/log/hive/hive.log   &"

Eu estava pensando em criar serviço a partir desse comando, mas não consigo alcançar o código de trabalho. Os scripts init.d da forma% function start parecem com os seguintes:

DAEMON="hive-metastore"
DESC="hive metastore service"
EXEC_PATH="/usr/lib/hive/bin/hive"
SVC_USER="hive"
DAEMON_FLAGS="datanode"
PIDFILE="/var/run/hive/hive.pid"
LOCKDIR="/var/lock/subsys"
LOCKFILE="$LOCKDIR/hive"

install -d -m 0755 -o hive -g hive /var/run/hive 1>/dev/null 2>&1 || :
[ -d "$LOCKDIR" ] || install -d -m 0755 $LOCKDIR 1>/dev/null 2>&1 || :
start() {
  [ -x $EXEC_PATH ] || exit $ERROR_PROGRAM_NOT_INSTALLED
  log_success_msg "Starting ${DESC}: "

  su -s /bin/bash $TARGET_USER -c " $EXEC_PATH --service metastore > /var/log/hive/hive.out 2> /var/log/hive/hive.log &"

  # Some processes are slow to start
  sleep $SLEEP_TIME
  checkstatusofproc
  RETVAL=$?

  [ $RETVAL -eq $RETVAL_SUCCESS ] && touch $LOCKFILE
  return $RETVAL
}
    
por Piotr Stapp 07.02.2014 / 15:51

1 resposta

1

Bem, a maneira mais simples de executar esse comando na inicialização do sistema é:

echo 'su -l hive -c "nohup hive --service metastore > /var/log/hive/hive.out 2> /var/log/hive/hive.log   &"' >> /etc/rc.local

Em termos de /etc/init.d , a resposta é ... depende. Com o sysvinit, o /etc/init.d/hive só precisa ficar assim:

#!/bin/bash
su -l hive -c "nohup hive --service metastore > /var/log/hive/hive.out 2> /var/log/hive/hive.log   &"

Com um simples chmod 755 /etc/init.d/hive , pode-se adicionar esse script à inicialização do sistema adicionando alguns links:

cd /etc/rc3.d
ln -s ../init.d/hive S99hive
cd /etc/rc5.d
ln -s ../init.d/hive S99hive

Agora, se preferirmos usar chkconfig para iniciar o serviço, teremos o script /etc/init.d/hive da seguinte forma:

#!/bin/bash
# chkconfig: 2345 99 99
# Description: hive service
su -l hive -c "nohup hive --service metastore > /var/log/hive/hive.out 2> /var/log/hive/hive.log   &"

Em seguida, para adicioná-lo no momento da inicialização do sistema:

chkconfig --add hive

Se estiver usando uma distro com um init diferente, como upstart ou systemd, a maneira de obter um serviço para iniciar na inicialização do sistema é diferente. Por exemplo, systemd: link

    
por 07.02.2014 / 16:31