Deseja criar um script inicial; preciso de ajuda e conselhos

13

Atm, eu preciso iniciar e parar aleatoriamente (por falta de uma palavra melhor em minha mente) um trabalho. Começo digitando java -jar foo.jare, para impedi-lo, descubro seu pid e o mato. Matá-lo não causa perda de dados ou corrupção, nem nada, apenas a sua informação. É entediante fazer as duas etapas, porque o primeiro comando deve ser executado a partir de um diretório específico, ou seja, /usr/share/jetty(o kill pode ser executado de qualquer lugar).

Então, eu estava pensando em algo nas linhas de

service foo starte service foo stoppara iniciar e parar serviços. Isso é possível e, mais importante, correto? existe alguma outra solução?

Obrigado.

theTuxRacer
fonte

Respostas:

13

Sim, o Upstart é uma boa opção para isso. Basta criar um novo arquivo:

sudoedit /etc/init/my-jetty-jar.conf

Você pode alterar o nome do arquivo para o que quiser, mas colá-lo nele:

description     "Run my jetty jar"

# no start option as you might not want it to auto-start
# This might not be supported - you might need a: start on runlevel [3]
stop on runlevel [!2345]

# if you want it to automatically restart if it crashes, leave the next line in
respawn

script
    cd /usr/share/jetty
    su -c "/usb/bin/java -jar /path/to/foo.jar" nobody
end script

Algumas notas sobre isso, não estou falando sucom ninguém por segurança. Você pode precisar dele para suoutra conta, mas provavelmente não é recomendado que seja executado como root.

Oli
fonte
É necessário reiniciar para que as alterações tenham efeito? update-rc.dnão funcionou /
theTuxRacer
Você não precisa update-rc.dde trabalhos iniciantes.
Oli
o upstart assiste / etc / init usando o inotify, por isso geralmente conhece todas as edições nos arquivos abaixo. Não há necessidade de fazer nada, exceto 'start my-jetty-jar'. Ah, e @Oli, você pode definitivamente ter um emprego sem começar. [! 2345] Note-se que parar no nível de execução pode ser sinalizado no futuro, como uma má maneira de coisas de parada (uma vez que não garante que eles vão parar antes de sistemas de arquivos são desmontados)
SpamapS
Infelizmente, sua solução parece não funcionar (mais) para o Jetty 8, pois o start.jar gera outros processos, que não serão eliminados com sua abordagem. Eu criei uma outra questão para resolver este problema: stackoverflow.com/questions/10796242/...
Sebi
4
@ Sebi Você pode apenas precisar colocar um expect forklá (antes do scriptinício).
Oli