Qual é o equivalente Linux da Inicialização do Windows?


16

Existe alguma maneira de adicionar um aplicativo / script à inicialização do Linux para que toda vez que o sistema inicialize, ele seja executado?

Estou procurando uma maneira automatizada, ou seja, o usuário não deve adicionar isso pelo trabalho cron ou algo parecido.



se for ubuntu basta usar $ gnome-session-properties
user3804598

Respostas:


11

Algo como Cron ?

Observe a @rebootentrada

Essa é a abordagem mais flexível e mais semelhante às "Tarefas agendadas" do Windows (melhor na verdade).


é possível adicionar um trabalho no CRON sem a intenção do usuário?
Sourav

sim. basta escrever /etc/cron.dou ligar para o crontab do seu programa sem que eles saibam.

O que você quer dizer? Se você quer dizer adicionar manualmente um programaticamente, então sim. Crontabs são apenas arquivos de texto.

10

Início automático do Xorg

Além dos scripts de inicialização no nível do sistema, o ambiente da área de trabalho pode ter sua própria maneira de executar programas automaticamente. A pasta .config/autostartdeve ser uma maneira neutra para a área de trabalho de definir entradas de execução automática. /etc/xdg/autostarté para configuração em todo o sistema. Detalhes sobre as especificações em http://developer.gnome.org/autostart-spec/ .

Para o LXDE, as entradas de inicialização automática também podem ser definidas ~/.config/lxsession/LXDE/autostart.

É um pouco diferente se você precisar executar seus scripts depois que a rede estiver em funcionamento. Nesse caso, você deve verificar os scripts especiais pós-conexão que podem ser definidos para o seu gerente de rede. O NetworkManager e o wicd têm suas próprias maneiras de especificar entradas de execução automática pós-conexão. Se a rede estiver configurada via ifupdown, os scripts de pós-up podem ser colocados na /etc/network/if-up.d/pasta. Mas uma abordagem melhor para executar scripts pós-conexão pode ser systemd (para sistemas que o suportam, que é a maioria das distribuições modernas).

Iniciar automaticamente como um serviço systemd

Se o que você deseja iniciar automaticamente não é um aplicativo gráfico que requer uma área de trabalho, é melhor evitar o uso de qualquer recurso de inicialização automática fornecido pelo xorg ou pelo seu ambiente de área de trabalho atual.

systemd tornou-se onipresente em muitas distribuições modernas e oferece muito controle e flexibilidade em termos de como seus serviços são iniciados e como eles são executados.

Resumirei alguns benefícios (o systemd pode fazer muito mais ):

  • Executar como root ou como usuário específico: por exemplo User=myuser
  • Reinicie os serviços em caso de falha com tempos limite configuráveis: Restart=on-failure|on-watchdog|on-abnormal|always
  • Definindo o tipo de serviço: Type=simple|forking|oneshot|notify|dbus
  • Estabeleça pré-condições e dependências de inicialização, ou seja, você pode configurar seu serviço para iniciar após a rede estar pronta ( Wants=network-online.targetna [Unit]seção).

Um serviço de exemplo que inicia um daemon telegram-cli. Coloque-o em /etc/systemd/system/tg.service.

[Unit]
Description=MyDaemon
Wants=network-online.target
After=network-online.target

[Service]
ExecStart=/usr/local/bin/telegram-cli -k /etc/telegram-cli/tg-server.pub -W -P 1234 -d -vvvRC
ExecStop=/usr/bin/pkill -f telegram-cli

User=jicu

[Install]
WantedBy=multi-user.target

Agora você pode ativar o serviço para iniciar automaticamente:

sudo systemctl enable tg

Inicie o serviço:

sudo systemctl start tg

Pare o serviço:

sudo systemctl stop tg

Verifique o status:

systemctl status tg

Desative o serviço:

sudo systemctl disable tg

Para economizar sua digitação extra, você pode adicionar na sua ~/.bashrclinha alias sc='sudo systemctl $*'e poderá reduzir os comandos acima para, por exemplo sc start tg.

NOTA: Se você usou cron, sabe que as entradas do crontab são executadas em um ambiente restrito - o mesmo se aplica a systemd: sempre use caminhos absolutos e não faça suposições de nenhuma variável sendo definida. Defina explicitamente quaisquer variáveis ​​das quais seus scripts dependem. systemd não usará o usuário .bashrce $PATH.

Mais informações:


7

Sim, é possível executar programas na inicialização do Linux, definindo os caminhos para os executáveis rc.localque residem no diretório /etcou /etc/rc.d, por exemplo:

#!/bin/bash
# THIS FILE IS ADDED FOR COMPATIBILITY PURPOSES
#
# It is highly advisable to create own systemd services or udev rules
# to run scripts during boot instead of using this file.
#
# In contrast to previous versions due to parallel execution during boot
# this script will NOT be run after all other services.
#
# Please note that you must run 'chmod +x /etc/rc.d/rc.local' to ensure
# that this script will be executed during boot.

touch /var/lock/subsys/local
/path/to/executable

Nota: não esqueça de atribuir direitos executáveis ​​conforme descrito na documentação do arquivo, ou seja, Please note that you must run 'chmod +x /etc/rc.d/rc.local' to ensure that this script will be executed during boot.


adicionar entrada no arquivo iniciará o programa toda vez?
Sourav 16/08

2
Cada vez que você reinicia, sim. Se você deseja trabalhos agendados regularmente (todos os dias, horas, semanas ou qualquer combinação ímpar), o cronagendador é seu amigo.


1

Cada distribuição usa cada técnica de inicialização, portanto, é necessário consultar os documentos da sua distribuição. O /etc/rc.local é um lugar onde você pode colocar alguns scripts automatizados, mas está realmente desatualizado. Agora, a maioria dos sistemas baseados em Linux usa níveis de execução ou inicialização do sistema, de modo que a maioria dos trabalhos iniciados automaticamente podem ser controlados com uma boa classificação.


0

Encontrei minha resposta aqui: /programming/7221757/run-automatically-program-on-startup-under-linux-ubuntu Consegui criar um arquivo / script para desligar meu trackpad enquanto estava no minha sessão do Linux Ubuntu 12.10.


3
Que bom que você encontrou uma solução, poderia incluir um resumo das etapas em sua resposta, apenas para que essa resposta seja mais útil do que apenas um link. Obrigado!
slm

Estava procurando uma maneira de automatizar e desligar meu trackpad na inicialização. O comando que eu digitei no Terminal foi 'sudo modprobe -r psmouse'. Isso desligaria o trackpad na sessão atual. Eu queria automatizar isso na inicialização. Eu fiz algumas pesquisas e escrevi um script modificando o arquivo /etc/rc.local, adicionando 'sudo modprobe -r psmouse. Em seguida, emitindo os seguintes comandos do Terminal: 'sudo mv / filename /etc/init.d/' 'sudo chmod + x /etc/init.d/filename' 'sudo update-rc.d nome do arquivo padrão' Agora o touchpad está desativado na inicialização.
precisa saber é o seguinte
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.