Em um servidor compartilhado, como você executa um script / processo na inicialização?

2

Eu acho que eu poderia ter um cron job rodando a cada minuto, ou 5 minutos, e ver se o processo já estava rodando (não sei como fazer isso).

Seria essa a melhor maneira ou há outro script como o .startup no meu diretório inicial em que eu poderia colocar um script?

    
por cwd 28.01.2011 / 06:25

3 respostas

3

O problema aqui parece ser que você não tem acesso root neste host para alterar os scripts de inicialização do sistema, como /etc/rc.local . A ideia de usar uma linha @reboot em seu crontab de usuário vale a pena ser explorada. Eu não tentei isso como um usuário normal, mas deve funcionar.

A outra idéia é como você diz para executar algo no seu usuário crontab a cada poucos minutos, verifique se o processo está sendo executado e reinicie se não. Por exemplo:

*/5 * * * * ps -u $USER | grep myscript >/dev/null || $HOME/bin/myscript

Tenha muito cuidado com este tipo de coisa - se cometer um erro, acabará por começar uma cópia extra do seu programa a cada 5 minutos, o que poderá eventualmente causar muitos problemas.

    
por 28.01.2011 / 06:41
2

você poderia usar o chkconfig - ou ser preguiçoso e simplesmente rodar no seu crontab

@reboot command-goes-here

Esse link pode ajudar bastante (me poupa de digitar tudo ... claro)

link

    
por 28.01.2011 / 06:29
0

Dependendo da sua distribuição (você não mencionou isso), você tem uma área bastante ampla de escolha: chkconfig, rcconf, /etc/(rc.d/)rc.local, scripts de inicialização de symlinking no init.d \ rc .d - mas tudo isso requer privilégios de root.

Estou assumindo que você não tem acesso ao sudo. Isso deixa você com apenas uma opção, adicionando um script no crontab que verifica se o processo está sendo executado e, se não estiver, inicie-o. Você também ganha um tipo de aprimoramento de disponibilidade (por exemplo, se o seu processo travar, ele é iniciado novamente).

Minha opinião sobre isso é:

#!/bin/sh

proc=process_name
'ps aux > /tmp/.$proc; awk '/$proc/{print $2}' /tmp/.$proc > /tmp/.x' #if process is alive then copy its PID in .x
    if [ -s /tmp/.x ]; then    #-s file True if file exists and has a size greater than zero. 
            echo k   #.x is greater than zero => process is alive, all ok
    else
            /etc/init.d/daemon start _or_whatever_startup file_ #.x was zero, process dead.
    fi
'rm -f /tmp/.$proc && rm -f /tmp/.x'
    
por 28.01.2011 / 09:39