Quel est l'équivalent Linux du démarrage de Windows?

16

Existe-t-il un moyen d'ajouter une application / un script au démarrage de Linux pour que chaque fois que le système démarre, il sera exécuté?

Je recherche un moyen automatisé, c'est-à-dire que l'utilisateur ne devrait pas ajouter ceci par cron job ou quelque chose comme ça.

Sourav
la source
Voir aussi cette réponse SO: Exécuter automatiquement le programme au démarrage sous linux ubuntu
Abhishek Gupta
si c'est ubuntu, utilisez simplement $ gnome-session-properties
user3804598

Réponses:

11

Quelque chose comme Cron ?

Notez l' @rebootentrée

C'est l'approche la plus flexible, et celle qui ressemble le plus aux «tâches planifiées» de Windows (mieux en fait).

kevlar1818
la source
est-il possible d'ajouter un travail dans CRON sans intention de l'utilisateur?
Sourav
Oui. il suffit d'écrire /etc/cron.dou d'appeler crontab depuis votre programme à leur insu.
Que voulez-vous dire? Si vous voulez en ajouter manuellement un par programme, alors oui. Les Crontabs ne sont que des fichiers texte.
10

Démarrage automatique de Xorg

Mis à part les scripts de démarrage au niveau du système, votre environnement de bureau peut avoir sa propre façon d'exécuter des programmes automatiquement. Le dossier .config/autostartest censé être un moyen indépendant du bureau de définir les entrées d'exécution automatique. /etc/xdg/autostartest pour la configuration à l'échelle du système. Détails sur la spécification sur http://developer.gnome.org/autostart-spec/ .

Pour LXDE, les entrées de démarrage automatique peuvent également être définies dans ~/.config/lxsession/LXDE/autostart.

C'est un peu différent si vous devez exécuter vos scripts une fois le réseau opérationnel. Dans ce cas, vous devez vérifier les scripts spéciaux post-connexion qui peuvent être définis pour votre gestionnaire de réseau. Les deux NetworkManager et Wicd ont leurs propres façons de spécifier les entrées autorun post-connexion. Si le réseau est configuré via ifupdown, les scripts de post-up peuvent être placés dans le /etc/network/if-up.d/dossier. Mais une meilleure approche pour exécuter des scripts post-connexion pourrait être systemd (pour les systèmes qui le prennent en charge, ce qui est la majorité des distributions modernes).

Démarrage automatique en tant que service systemd

Si la chose que vous souhaitez démarrer automatiquement n'est pas une application graphique qui nécessite un bureau, il est préférable d'éviter d'utiliser les fonctionnalités de démarrage automatique fournies par xorg ou par votre environnement de bureau actuel.

systemd est devenu omniprésent dans de nombreuses distributions modernes, et il offre beaucoup de contrôle et de flexibilité en termes de démarrage et de fonctionnement de vos services.

Je vais résumer certains avantages ( systemd peut faire beaucoup plus ):

  • Exécuter en tant qu'utilisateur root ou utilisateur spécifique: par exemple User=myuser
  • Redémarrez les services en cas d'échec avec des délais d'expiration configurables: Restart=on-failure|on-watchdog|on-abnormal|always
  • Définition du type de service: Type=simple|forking|oneshot|notify|dbus
  • Établissez les conditions préalables et les dépendances de démarrage, c'est-à-dire que vous pouvez configurer votre service pour qu'il démarre après la mise en place du réseau ( Wants=network-online.targetdans la [Unit]section).

Un exemple de service qui démarre un démon telegram-cli. Placez-le /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

Vous pouvez maintenant activer le démarrage automatique du service:

sudo systemctl enable tg

Démarrez le service:

sudo systemctl start tg

Arrêtez le service:

sudo systemctl stop tg

Vérifiez l'état:

systemctl status tg

Désactivez le service:

sudo systemctl disable tg

Pour vous éviter de taper davantage, vous pouvez ajouter votre ~/.bashrcligne alias sc='sudo systemctl $*'puis vous pourrez raccourcir les commandes ci-dessus, par exemple sc start tg.

REMARQUE: si vous l'avez utilisé, cronsachez que les entrées crontab sont exécutées dans un environnement restreint - la même chose s'applique à systemd: utilisez toujours des chemins absolus et ne faites aucune hypothèse sur les variables définies. Définissez explicitement toutes les variables dont vos scripts dépendent. systemd n'utilisera pas votre utilisateur .bashrcet $PATH.

Plus d'informations:

ccpizza
la source
7

Oui, il est possible d'exécuter des programmes au démarrage sur Linux en définissant les chemins d'accès aux exécutables rc.localqui résident dans le répertoire /etcou /etc/rc.d, par exemple:

#!/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

Remarque: n'oubliez pas d'attribuer des droits exécutables comme décrit dans la documentation du fichier, ie Please note that you must run 'chmod +x /etc/rc.d/rc.local' to ensure that this script will be executed during boot.

Dirk Eddelbuettel
la source
l'ajout d'une entrée dans le fichier démarrera le programme à chaque fois?
Sourav
2
Chaque fois que vous redémarrez, oui. Si vous voulez des tâches planifiées régulièrement (tous les jours, heures, semaines ou toute autre combinaison impaire), le cronplanificateur est votre ami.
3
  1. Rechercher à l' Startup applicationsaide du bouton d'accueil
  2. Cliquez sur Add
  3. Entrez un nom pour appeler l'application (n'importe quel nom fera l'affaire)
  4. Dans le Startup command boxentrez la commande
  5. Cliquez OK(vous devriez voir votre nouvelle commande dans la liste)
  6. Cliquez sur Close

Testez en redémarrant ou en vous déconnectant puis en vous reconnectant.

Source: https://help.ubuntu.com/community/AddingProgramToSessionStartup

coder1111
la source
1

Chaque distribution utilise chaque technique de bootstrap, il faut donc regarder les documents pour votre distribution. /etc/rc.local est un endroit où vous pouvez mettre des scripts automatisés, mais il est vraiment obsolète. Maintenant, la plupart des systèmes basés sur Linux utilisent des niveaux d'exécution ou l'amorçage de systemd, de sorte que la plupart des travaux démarrés automatiquement pourraient être contrôlés avec précision.

galadog
la source
0

J'ai trouvé ma réponse ici: /programming/7221757/run-automatically-program-on-startup-under-linux-ubuntu J'ai pu créer un fichier / script pour éteindre mon trackpad pendant que je ma session Linux Ubuntu 12.10.

CatGuyTX
la source
3
Heureux que vous ayez trouvé une solution, pourriez-vous inclure un résumé des étapes dans votre réponse, juste pour que cette réponse soit plus utile qu'un simple lien. Merci!
slm
Je cherchais un moyen d'automatiser et d'éteindre mon trackpad au démarrage. La commande que j'ai entrée dans Terminal était «sudo modprobe -r psmouse». Cela désactiverait le trackpad pendant la session en cours. Je voulais automatiser cela au démarrage. J'ai fait quelques recherches et écrit un script en modifiant le fichier /etc/rc.local, en ajoutant 'sudo modprobe -r psmouse. Puis émettez les commandes suivantes à partir du terminal: 'sudo mv / filename /etc/init.d/' 'sudo chmod + x /etc/init.d/filename' 'sudo update-rc.d nom de fichier par défaut' Maintenant le pavé tactile est éteint au démarrage.
CatGuyTX