Je dois exécuter une application automatiquement au démarrage d’Ubuntu. J'ai cette application en cours d'exécution sans ouvrir le terminal. Cependant, cette application affiche des informations dans une fenêtre de terminal et, par conséquent, j'ai besoin que l'application s'exécute strictement après l'ouverture de gnome-terminal (automatiquement). À cette fin, j'ai essayé de créer un fichier de script dans init.d comme il est expliqué ici . Le contenu du script est:
#!/bin/bash
cd /home/mediambient/programa
/usr/bin/gnome-terminal -e ./driver &
Cela fonctionne si j'exécute le fichier, mais ne semble rien faire lorsque je redémarre l'ordinateur. Quelqu'un peut-il me dire ce que je fais mal?
Merci d'avance.
Vous ne pouvez pas créer un script qui s'exécute à partir de init.d
et qui affiche une fenêtre gnome-terminal
, car les scripts de init.d
sont exécutés avant qu'une session de connexion ne soit affichée. Ils s'exécutent avant même que l'interface utilisateur graphique ne soit exécutée.
Si vous devez exécuter ce script au démarrage de la machine, vous devez lui faire écrire son résultat au lieu d’en faire un texte automatiquement. Pour qu’il exécute à la fois une sortie normale et une sortie d’erreur dans un fichier journal, créez le script comme suit:
#!/bin/bash
cd /home/mediambient/programa
./driver &>> logfile
Remplacez logfile
par le nom du fichier journal que vous souhaitez utiliser. Vous pouvez avoir ce fichier dans le dossier /home/mediambient/programa
ou le placer dans le dossier des fichiers journaux du système (/var/log
). C'est ton choix. Veuillez noter que l'opérateur &>>
ajoutera la sortie à la fin du fichier journal. Si vous souhaitez que le fichier journal soit écrasé à chaque fois, utilisez plutôt l'opérateur &>
.
root
Veuillez également noter que les scripts de init.d
seront exécutés sous la forme root
. Si vous ne le souhaitez pas, mais souhaitez exécuter programa
en tant qu'utilisateur mediambient
, vous pouvez écrire le script comme suit:
#!/bin/bash
cd /home/mediambient/programa
Sudo -u mediambient ./driver &>> logfile
Ceci exécute le programme en tant que mediambient
mais enregistre quand même le fichier journal sous le nom root
. Si vous souhaitez également enregistrer le fichier journal sous le nom mediambient
(ce que vous devriez probablement faire si vous le placez dans le dossier personnel de mediambient
), vous pouvez utiliser:
#!/bin/bash
cd /home/mediambient/programa
Sudo -u mediambient ./driver 2>&1 | Sudo -u mediambient tee logfile > /dev/null
(Si cela vous intéresse de savoir exactement comment cela fonctionne, cela explique 2>&1
et cela explique tee
.)
(En passant, veuillez noter que rien dans ce script n'exige spécifiquement bash
, qui est un excellent shell interactif mais qui nécessite un peu de ressources à utiliser pour les scripts d'initialisation et d'arrière-plan. Pendant longtemps, le shell par défaut pour l'exécution de tels scripts dans Ubuntu dash
, ce qui est beaucoup plus léger. Si vous utilisez #!/bin/sh
au lieu de #!/bin/bash
, utilisez le shell préféré du système d’exploitation pour exécuter des scripts de style POSIX. , mais c’est une bonne habitude à prendre.)
Sinon, si vous avez vraiment besoin que le script soit exécuté lorsque l'utilisateur mediambient
se connecte graphiquement (plutôt que lorsque l'ordinateur démarre), vous pouvez le faire exécuter driver
dans une fenêtre gnome-terminal
. Vous ne pouvez pas utiliser init.d
pour cela; au lieu de cela, vous devez utiliser la fonctionnalité fournie par votre environnement de bureau.
Si vous utilisez une Ubuntu basée sur GNOME (avec Unity, Unity 2D, GNOME Classic/Fallback ou GNOME Shell comme environnement de bureau) - ce que je suppose que vous êtes, puisque vous voulez afficher le résultat dans un fichier gnome-terminal
-- alors vous pouvez le faire en appuyant sur Alt+ F2 et en cours d'exécution gnome-session-properties
. Cela vous donne la possibilité de modifier vos applications de démarrage. Placez ce qui suit dans le champ Command:
:
gnome-terminal --working-directory=/home/mediambient/programa -e ./driver
Ou vous pouvez (en quelque sorte) obtenir le meilleur des deux mondes en plaçant le script dans init.d
à exécuter lorsque Ubuntu démarre pour la première fois, puis en créant automatiquement une fenêtre gnome-terminal
montrant le résultat au fur et à mesure, mediambient
se connecte graphiquement. Pour ce faire, ajoutez une entrée aux applications de démarrage avec cette commande:
gnome-terminal --working-directory=/home/mediambient/programa -x tail -n 512 -f logfile
(Ou si logfile
est un chemin absolu plutôt que relatif vers le fichier journal, vous pouvez omettre --working-directory=/home/mediambient/programa
.)
-n 512
signifie qu'il affiche jusqu'à 512 lignes du fichier journal avant de commencer à afficher le fichier journal. (Elle affichera ensuite chaque ligne au fur et à mesure de son ajout au fichier journal.) Il s’agit généralement d’un choix judicieux puisqu’une fenêtre gnome-terminal
ne mémorise que 512 lignes par défaut. Si vous exécutez gnome-terminal
avec un profil modifié mémorisant plus de 512 lignes, vous pouvez modifier la commande tail
en conséquence.
Si vous êtes préoccupé par la taille croissante du fichier journal, la première chose à faire est de déterminer si cela risque de poser problème. Vous pourriez juste être en mesure d'estimer. Supposons que le fichier journal augmente d'une ligne par seconde (ce qui est beaucoup plus rapide que la plupart des fichiers journaux) et que chaque ligne compte 80 caractères. Alors dans un mois, le fichier a une taille de 200 Mo . En un an, il atteint environ 2,5 Go. Quelques centaines de mégaoctets vont probablement bien et plusieurs gigaoctets ne le sont probablement pas. La question est de savoir si vous pourrez éditer manuellement le fichier journal pour l'effacer. dehors, au moins tous les quelques mois?
S'il se rapproche d'une ligne par minute, le fichier croît à un taux inférieur à 50 Mo par an , auquel cas vous n'avez probablement jamais à vous soucier de vider le fichier.
Il existe deux moyens simples pour effacer le fichier. Vous pouvez le modifier et en supprimer une partie (ou la totalité). Ou vous pouvez le supprimer et le laisser être créé à nouveau. Si vous le supprimez, il continuera à occuper de l’espace sur le disque jusqu’à ce que plus rien ne l’accède, ce qui signifie que vous devrez peut-être redémarrer driver
. Vous devez également redémarrer tail
, mais vous pouvez résoudre ce problème en utilisant une commande tail
modifiée qui ne garde pas le fichier ouvert:
gnome-terminal --working-directory=/home/mediambient/programa -x tail -n 512 --follow=name logfile
(J'ai remplacé -f
par --follow=name
.)
Pour une gestion plus avancée ou automatique des fichiers journaux en croissance, vous pouvez utiliser la commande logrotate
. La commande logrotate
vérifie si les fichiers journaux ont dépassé leur taille ou leur âge maximal, et les "fait pivoter", les compressant dans des archives numérotées (qui sont elles-mêmes éventuellement supprimées) et créant un nouveau fichier journal. logrotate
vous enverra même un courrier électronique à propos des journaux, si vous le configurez pour le faire. La logrotate
page de manuel explique comment écrire des fichiers de configuration pour indiquer à logrotate
les journaux à utiliser.
Vous pouvez exécuter logrotate
automatiquement à partir de la crontab utilisateur de mediambient
. (Une crontab répertorie les tâches effectuées périodiquement par le démon cron
.) La commande crontab
installe et fonctionne sur les crontabs utilisateur. Vous pouvez également ajouter une entrée dans la table des tâches système, /etc/crontab
(ce qui serait un choix raisonnable si vous exécutez le script dans init.d
et que vous l'exécutez sous driver
sous la forme root
plutôt que sous la forme mediambient
. Veuillez noter que les journaux système d'Ubuntu sont tournés avec logrotate
, bien que dans la configuration par défaut actuelle d'Ubuntu, ils ne soient pas appelés directement depuis n'importe quelle crontab. .
Cet aperçu de la rotation des journaux avec logrotate
et de la planification des tâches avec cron
devrait vous aider à démarrer, mais n'hésitez pas à poser des questions plus détaillées sur AskUbuntu sur ces sujets ou, si vous préférez, à commenter ici ou à modifier votre question pour fournir plus de détails vous voulez faire (alors je pourrais peut-être donner des explications plus détaillées sur la façon de le faire).
Vous avez ceci écrit:
/usr/bin/gnome-terminal -e ./driver &
Le paramètre & qui se trouve à la fin de la ligne signifie que le programme va être masqué. Ceci est utile pour exécuter des applications en arrière-plan telles que des serveurs Web contenant des sons de démarrage, mais dans votre cas, vous ne devriez pas l'utiliser. La solution est aussi simple que de l'enlever:
/usr/bin/gnome-terminal -e ./driver
Et j'ai vu que vous n'utilisiez pas GNOME pour le démarrage automatique. Utilisez ces instructions au lieu de celles de Server (remplacez google-chrome par la commande ci-dessus!): Démarrage automatique de Chrome sous ubunt