Adicionar item ao inittab no OpenSuse 12.1

Adicionar item ao inittab no OpenSuse 12.1

Atualmente estou trabalhando em um projeto que precisa ser adicionado inittabpara que o programa seja carregado durante a inicialização.

O programa que estou tentando iniciar é o aplicativo ac# mono. Eu criei um script inicial e se o script inicial for executado manualmente, o programa será iniciado corretamente. Porém, quando coloco no inittabprograma não inicia.

Fiz o check-in /var/log/messages, mas não diz que há algo errado, apenas diz que está recarregando.

Abaixo está o que adicionei ao meu inittabscript

bes:2345:respawn:/home/bits/MyProgram/start.myprogram

Obrigado por qualquer ajuda que você possa fornecer

ATUALIZAR Abaixo está o código no script inicial que está localizado em /home/bits/MyProgram.

#!/bin/sh

cd /home/bits/MyProgram

/usr/bin/mono EmailServer.exe "$@"

Eu também tentei adicionar > mylog.txt no final da linha começando com /usr/bin/mono, por exemplo

/usr/bin/mono EmailServer.exe "$@" > meulog.txt

Se eu executar o script de início manualmente, mesmo que eu não esteja no diretório onde o script de início está localizado, ele funciona bem, é apenas quando eu o adiciono ao inittab e executo o telinit q ele nunca inicia e o log não é gravado, mas o log é gravado se eu iniciar o programa manualmente.

Obrigado por qualquer ajuda que você possa fornecer.

Responder1

Coloque seu programa em algum lugar.

Copie e edite o arquivo de modelo de esqueleto para controle de tarefa init encontrado em/etc/init.d/skeleton.

Modifique este arquivo para indicar QUAL nível de execução você deseja... no seu exemplo, você deseja 2,3,4,5, há opções no topo do arquivo (nos comentários) para indicar os níveis de execução desejados

Coloque este novo arquivo em/etc/init.dcom um nome descritivo. (meunomefancyusado no exemplo)

Um método independente de plataforma para testar isso ou para ativar/desativar (se você usou oesqueletoarquivo)

sudo /etc/init.d/myfancyname start
sudo /etc/init.d/myfancyname stop
sudo /etc/init.d/myfancyname restart

Existem métodos específicos de distribuição para realizar essas mesmas ações, por exemplo, o Debian usaupdate-rc.d meunomefancy [iniciar|parar|ativar|desativar...]

Modificar o inittab égeralmentearuimideia, se você estragar tudo, o sistema não inicializa mais e você terá DOIS problemas. (não é necessário regex!)

Adicionar scripts ao subdiretório /etc/init.d/ é mais padronizado, pode ser usado com quase QUALQUER tipo de Linux, provavelmente alguns *nix's, talvez alguns bsd's.

Responder2

O problema é simples, você está usando o OpenSuse 12.1 queusa sistemaem vez do seu clássicoSistema de inicialização do System V.

Para instalar um novo local de serviço, crie o seguinte arquivo em /etc/systemd/system/myprogname.service

[Unit]
Description=My progname service file

[Service]
ExecStart=/home/bits/MyProgram

[Install]
WantedBy=multi-user.target

Depois corre systemctl daemon-reloadesystemctl start myprogname.service

Se você deseja reiniciar automaticamente o MyProgname, você deve adicionar

Restart=restart-always

para a seção de serviço.

Responder3

Você precisa executar telinit qpara dizer ao init para reload /etc/inittab, isso não fará isso automaticamente. Acho que você fez isso desde que mencionou a Re-reading inittabmensagem (você viu essa mensagem, certo?) nos logs do sistema.

O problema é que o seu processo não está iniciando ou que o seu programa falha durante a inicialização? Escreva um script wrapper que redirecione erros para um arquivo de log:

#!/bin/sh
exec >/var/log/myprogram.log 2>&1 
exec /home/bits/MyProgram/start.myprogram

Verifique se o arquivo de log foi criado e veja se aparece algum erro nele.

Uma coisa que vem à mente é que seu programa pode exigir variáveis ​​de ambiente definidas em sua sessão. O initprocesso tem um ambiente muito limitado. Se necessário, modifique o script wrapper para configurar todas as variáveis ​​necessárias.

Responder4

Quando initlê umComandopara executar inittab, ele bifurca um shell e envia oComandocomo parâmetro para o execcomando nesse shell. Então, verifique o que acontece se você fizer manualmente:

sh -c exec /home/bits/MyProgram/start.myprogram

Outra coisa que eu tentaria seria ignorar completamente o script do inicializador, com algo assim no inittab:

bes:2345:respawn:/usr/bin/mono /home/bits/MyProgram/EmailServer.exe "$@"

informação relacionada