web-dev-qa-db-fra.com

Lancer le programme à l'écran après le redémarrage

J'utilise plusieurs boîtes Ubuntu 12.04 sans tête. Mon utilisation typique consiste à vous connecter à chaque machine via une session PuTTY et à exécuter un script à l'aide de screen.

Une fois connecté via PuTTY, j’exécute les opérations suivantes à partir de la ligne de commande: screen /home/user/"script"

Ma question est:

Existe-t-il un moyen d’exécuter automatiquement mon script/programme après un redémarrage? J'essaie d'éviter une perte de productivité dans une situation de coupure de courant/de redémarrage automatique.

3
user142219

Vous pouvez utiliser cron pour le faire pour vous.

  • Il suffit de faire crontab -e dans le terminal
  • Il s'ouvrira dans votre éditeur sélectionné, où vous pourrez taper
    @reboot <your command>
    (assurez-vous de donner le chemin complet pour tous les exécutables)
  • Enregistrez le fichier et quittez

Réf.: http://manpages.ubuntu.com/manpages/precise/en/man5/crontab.5.html

4
Vishnu Kumar

La manière officielle de le faire est de créer des scripts d'initialisation. Ces scripts comportent une commande de démarrage, d'arrêt, de redémarrage et d'état et peuvent être configurés pour exécuter ces commandes à des heures spécifiques. Ainsi, lorsque vous basculez sur leven 6 (redémarrage), le service sera arrêté avant le redémarrage et s’il est configuré correctement, il sera automatiquement lancé sur ce script lors du passage au niveau d’exécution 3. Vous trouverez ces scripts dans /etc/init.d. Si vous créez le fichier correctement (vous devez donc pouvoir gérer les paramètres de démarrage et d'arrêt), vous pouvez exécuter les paramètres par défaut de update-rc.d script.sh pour le définir pour un démarrage automatique. Assurez-vous d’avoir utilisé chmod + x sur le script pour le rendre exécutable. Le dossier /etc/init.d contient de nombreux exemples illustrant la procédure.

Il y a aussi le fichier /etc/rc.local, ce fichier est exécuté après le démarrage complet du système, et vous pouvez simplement ajouter vos propres commandes.

Personnellement, je préfère les scripts init.d car vous pouvez vous assurer que le programme se ferme normalement, évitant ainsi d'éventuelles erreurs de dataloss ou autres. Mais pour une commande, ou quelque chose qui ne peut pas vraiment casser /etc/rc.local fera très bien l'affaire.

1
Cheiron

Modifiez votre script de manière à ce qu’il puisse être appelé en tant que script d’initiation ou, mieux encore, en tant que tâche récente. Avec un peu de chance, vous pouvez le garder tel quel et le lancer au démarrage en ajoutant simplement une configuration upstart à /etc/init. (Prenez n’importe quel petit fichier .conf comme modèle.)

Deux choses dont vous devez être conscient:

  1. Votre script est appelé avec les privilèges root. Déposez-les afin que votre script s'exécute avec les privilèges utilisateur appropriés (votre identité d'utilisateur, dans ce cas). Faites cela en appelant la dernière commande screen dans votre script en utilisant su

    su -c "screen ..." - username.

  2. Lorsqu'il est démarré au démarrage, votre script est exécuté sans terminal de contrôle, alors que vous l'exécutez actuellement à partir d'un shell. Comme vous utilisez screen, je suppose que vous souhaitez vous reconnecter au terminal exécutant script lors de votre prochaine connexion. Si tel est le cas, cela peut nécessiter de passer des options supplémentaires lorsque vous appelez screen.

1
zwets

J'ai ceci dans le script pour démarrer rtorrent dans un écran au démarrage:

#!/bin/sh

case $1 in
     start)
        su - johan -c "screen -dm rtorrent"
       ;;
     stop)
        killall rtorrent
        killall screen
        ;;
esac
exit 0

Vous pouvez combiner cela avec Vishnus answer si vous préférez crontab, <your command> = screen -dm /usr/home/"script".

1
McNisse

J'ai essayé tout ce qui précède, sans succès. Le script que je lance a besoin de X pour lancer.

En fin de compte, ce qui a fonctionné a bien fonctionné, c’était de créer un petit script appelé launch.sh dans mon répertoire personnel et de l’ajouter à la liste des applications de démarrage Ubuntu.

launch.sh contenait les éléments suivants et exécutait mon script de l'intérieur:

#!/bin/sh
screen -dmS 051 /home/{user}/{myscript} 

J'ai découvert que le fichier de configuration de l'application de démarrage launch.sh se trouvait dans le fichier /home/{user}/.config/autostart/launch.sh.desktop et que je pouvais recréer les deux fichiers au même emplacement que l'autre boîtes et recréer le succès. Merci à tous ceux qui ont essayé d'aider. Je transpire un peu moins de balles après avoir trouvé une solution de contournement pour cela.

0
user142219