Como posso executar um comando após a inicialização?
27
Gostaria de executar o comando shell simples echo 1 > /proc/sys/kernel/sysrqem cada inicialização, para ativar as chaves sysrq. Quando na inicialização isso deve ser feito, e onde devo colocar um script para fazer isso?
Eu imploro para diferir, @davidgo. As referências que você está citando são um pouco obsoletas: enquanto o crontab funciona, o /etc/rc.local não funciona em systemddistribuições como o Arch Linux. Ao nos referirmos a eles, podemos estar enviando Demetri em uma perseguição selvagem. Algumas atualizações, às vezes, precisam ser feitas.
MariusMatutiae
Respostas:
37
Depende das distribuições.
Se você está nas distros derivadas do Debian, existem pelo menos dois locais apropriados, /etc/rc.local e crontab. Você pode invocar o crontab como root,
crontab -e
e depois insira esta linha
@reboot /home/my_name/bin/my_command
onde my_commandé um arquivo executável ( chmod 755 my_command).
Como alternativa, você pode colocar uma linha como esta
/home/my_name/bin/my_command
em /etc/rc.local, e isso será executado por último. De qualquer forma, os pls lembram que você está usando o ambiente raiz, não o seu. Também por esse motivo, é melhor usar caminhos absolutos.
Se você estiver em uma distribuição do sistema (Arch Linux, Fedora 19, ...), a primeira opção (crontab) ainda é válida, enquanto a segunda (/etc/rc.local) não existe mais. Nesse caso, você deve aprender como iniciar um serviço a ser executado systemctl, mas isso pode ser mais do que você esperava com sua simples pergunta.
Você pode confirmar isso para o Fedora? Minha pesquisa me diz que o rc.local ainda será executado se existir e for executável, mas não estiver configurado por padrão. Percebi ramificações preocupantes se o rc.local não for executado! (Eu só consegui encontrar referências para isso no Fedora 18 - forums.fedoraforum.org/showthread.php?t=291889 )
davidgo
Você está certo, no Fedora 19 você ainda pode tê-lo, se você realmente quiser. Mas ele não está mais compactado, docs.fedoraproject.org/en-US/Fedora/16/html/Release_Notes/… bullet 3.2.4. Além disso, ele não existe completamente no Arch Linux, então achei seguro incluir um aviso sobre isso.
MariusMatutiae
2
talvez este seja um alias desconhecido para mim, mas @bootnão exista, apenas @rebootdebianhelp.co.uk/crontab.htm
Zarathustra
19
Se o seu sistema estiver executando uma versão croncompatível com ele (especificamente o Vixie cron), você poderá usá-lo @rebootem um trabalho cron.
Esta é uma das 8 seqüências especiais que ele suporta.
Citando a crontab(5)página de manual (do meu sistema Ubuntu 12.04):
Em vez dos cinco primeiros campos, uma das oito seqüências especiais pode aparecer:
string meaning
------ -------
@reboot Run once, at startup.
@yearly Run once a year, "0 0 1 1 *".
@annually (same as @yearly)
@monthly Run once a month, "0 0 1 * *".
@weekly Run once a week, "0 0 * * 0".
@daily Run once a day, "0 0 * * *".
@midnight (same as @daily)
@hourly Run once an hour, "0 * * * *".
Observe que a inicialização, no que diz @rebootrespeito, é a hora em que o daemon cron (8) é iniciado. Em particular, pode ser antes de alguns daemons do sistema ou outras instalações serem iniciados. Isso ocorre devido à sequência de ordem de inicialização da máquina.
Isso está longe de ser a única maneira de executar algo no momento da inicialização, mas é uma alternativa.
Praticamente todas as variantes do Linux (há muito, muito tempo) têm um arquivo /etc/rc.local que é executado na inicialização - você pode simplesmente adicionar o comando a ele.
Dito isto, você nem precisa fazer isso. A maneira "correta" seria modificar / adicionar a linha kernel.sysrq = 1 no /etc/sysctl.conf
systemd
distribuições como o Arch Linux. Ao nos referirmos a eles, podemos estar enviando Demetri em uma perseguição selvagem. Algumas atualizações, às vezes, precisam ser feitas.Respostas:
Depende das distribuições.
Se você está nas distros derivadas do Debian, existem pelo menos dois locais apropriados, /etc/rc.local e crontab. Você pode invocar o crontab como root,
e depois insira esta linha
onde
my_command
é um arquivo executável (chmod 755 my_command
).Como alternativa, você pode colocar uma linha como esta
em /etc/rc.local, e isso será executado por último. De qualquer forma, os pls lembram que você está usando o ambiente raiz, não o seu. Também por esse motivo, é melhor usar caminhos absolutos.
Se você estiver em uma distribuição do sistema (Arch Linux, Fedora 19, ...), a primeira opção (crontab) ainda é válida, enquanto a segunda (/etc/rc.local) não existe mais. Nesse caso, você deve aprender como iniciar um serviço a ser executado
systemctl
, mas isso pode ser mais do que você esperava com sua simples pergunta.fonte
@boot
não exista, apenas@reboot
debianhelp.co.uk/crontab.htmSe o seu sistema estiver executando uma versão
cron
compatível com ele (especificamente o Vixie cron), você poderá usá-lo@reboot
em um trabalho cron.Esta é uma das 8 seqüências especiais que ele suporta.
Citando a
crontab(5)
página de manual (do meu sistema Ubuntu 12.04):Isso está longe de ser a única maneira de executar algo no momento da inicialização, mas é uma alternativa.
fonte
Praticamente todas as variantes do Linux (há muito, muito tempo) têm um arquivo /etc/rc.local que é executado na inicialização - você pode simplesmente adicionar o comando a ele.
Dito isto, você nem precisa fazer isso. A maneira "correta" seria modificar / adicionar a linha kernel.sysrq = 1 no /etc/sysctl.conf
fonte