Outils pour utilisateurs

Outils du site


issue145:c_c

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentesRévision précédente
Prochaine révision
Révision précédente
issue145:c_c [2019/06/03 23:34] d52frissue145:c_c [2019/06/07 15:43] (Version actuelle) auntiee
Ligne 1: Ligne 1:
 **One of the programs I’ve written that I use pretty much every day is something I call “media-tracker”. It’s a Ruby on Rails app that allows me to add/track movie (cinema and DVD) and game releases. Lately, I’ve also started tracking current episodes of shows from streaming services (Netflix, Crunchroll, Amazon Prime Video) due to the frequency with which I start a show, watch a chunk of it, and then notice it’s been removed from the streaming service. This way I can pick up where I’ve left off if the show pops up somewhere else or I buy a DVD of it. Long story short - I start this app in Tmux manually every time I log in. I’ve finally gotten tired of this, and instead created a small systemd service to run the script on boot.** **One of the programs I’ve written that I use pretty much every day is something I call “media-tracker”. It’s a Ruby on Rails app that allows me to add/track movie (cinema and DVD) and game releases. Lately, I’ve also started tracking current episodes of shows from streaming services (Netflix, Crunchroll, Amazon Prime Video) due to the frequency with which I start a show, watch a chunk of it, and then notice it’s been removed from the streaming service. This way I can pick up where I’ve left off if the show pops up somewhere else or I buy a DVD of it. Long story short - I start this app in Tmux manually every time I log in. I’ve finally gotten tired of this, and instead created a small systemd service to run the script on boot.**
 +
 +Un des programmes que j'ai écrits et que j'utilise presque chaque jour est quelque chose que j'ai appelé « media-tracker ». C'est une appli Ruby on Rails qui me permet de d'ajouter/de pister un film (de cinéma ou de DVD) et les publications de jeux. Dernièrement, j'ai aussi commencé à suivre les épisodes actuels des émissions sur les services de streaming (Netflix, Crunchroll, Amazon Prime Video) du fait de la fréquence à laquelle je commence une émission, j'en regarde un bout, puis je m'aperçois qu'elle a été retirée du service de streaming. De cette façon, je peux détecter où je me suis arrêté si l'émission apparaît quelque part ailleurs ou si je l'achète en DVD. Pour faire court, je démarre cette appli manuellement dans Tmux chaque fois que je me connecte. J'en ai eu finalement marre et, à la place, j'ai créé un petit service systemd pour lancer le script au démarrage.
  
 **Notes **Notes
Ligne 6: Ligne 8:
  
 All commands have been run on an ArchLinux system. If your distribution has a different format (ie, systemctl <service> <command>), then stick to your distribution’s format. If you’re unsure, then use the commands I list here and see what errors occur.** All commands have been run on an ArchLinux system. If your distribution has a different format (ie, systemctl <service> <command>), then stick to your distribution’s format. If you’re unsure, then use the commands I list here and see what errors occur.**
 +
 +Notes
 +
 +Cet article se concentrera sur l'installation et le fonctionnement d'une appli Rails via systemd. Si vous utilisez quelque chose de différent, les grandes lignes seront les mêmes, mais vous aurez peut-être des variables d'environnement en plus à ajuster.
 +
 +Toutes les commandes ont été lancées sur un système ArchLinux. Si votre distribution a un format différent (c'est-à-dire systemctl <service> <command>), restez sur le format de votre distribution. Si vous hésitez, utilisez les commandes que je liste et voyez quelles erreurs apparaissent.
  
 **Getting set up **Getting set up
Ligne 15: Ligne 23:
  
 This is important, as you’ll need to tell Systemd what to set these variables to, otherwise commands will fail or simply not be found.** This is important, as you’ll need to tell Systemd what to set these variables to, otherwise commands will fail or simply not be found.**
 +
 +Faire le paramétrage
 +
 +D'abord, vous voudrez bien noter où se trouvent vos fichiers et tous les chemins que vous devez connaître (tel que $GEM_HOME et la partie adéquate de votre $PATH). Vous pouvez trouver ces informations en lançant simplement ce qui suit dans votre terminal préféré :
 +
 +echo $PATH
 +echo $GEM_HOME
 +
 +C'est important, car vous devrez dire à Systemd à quelles valeurs paramétrer ces variables, sinon les commandes planteront ou ne seront simplement pas trouvées.
  
 **Decide - user or system service? **Decide - user or system service?
Ligne 24: Ligne 41:
  
 Think about it and make your decision. Then skip ahead to the relevant section.** Think about it and make your decision. Then skip ahead to the relevant section.**
 +
 +À décider - Service utilisateur ou service système ?
 +
 +Les systèmes les plus modernes ont paramétré systemd pour tourner à la fois dans une version système et dans une version spécifique à l'utilisateur. Elles sont séparées (et elles surveillent des dossiers différents). L'approche est similaire dans les deux cas, mais voici les principales différences :
 +
 +1. Les services de systemd à l'échelle du système, quand ils sont autorisés, tournent au démarrage. Les services basés sur l'utilisateur démarreront à la connexion.
 +2. Les services basés sur l'utilisateur ne peuvent être configurés pour fonctionner aussi en tant qu'autre utilisateur (par exemple, si vous voulez lancer Apache comme un utilisateur « html », ou similaire). Vous devrez alors utiliser la version à l'échelle du système.
 +
 +Réfléchissez-y et prenez votre décision. Puis, sautez à la section pertinente.
  
 **System-wide service **System-wide service
Ligne 32: Ligne 58:
  
 Speaking of Gems, I needed to configure the environment variables to point to my .gem directory paths, otherwise the service failed to find the correct commands. Most articles I saw on this topic claimed that bash -lc would load the user’s shell profile (and therefore the variables), but that didn’t seem to be the case in ArchLinux. If you want to test to see if these lines are required on your machine, just delete them and check the output of your service through journalctl.** Speaking of Gems, I needed to configure the environment variables to point to my .gem directory paths, otherwise the service failed to find the correct commands. Most articles I saw on this topic claimed that bash -lc would load the user’s shell profile (and therefore the variables), but that didn’t seem to be the case in ArchLinux. If you want to test to see if these lines are required on your machine, just delete them and check the output of your service through journalctl.**
 +
 +Service à l'échelle du système
 +
 +Le fichier media-tracker.service que j'ai créé ressemble au code présenté ci-dessous.
 +
 +Comme vous pouvez le voir, il y a quelques points importants dans ce fichier. D'abord, je paramètre Type à « simple », ce qui signifie que je m'attends à ce que la commande ExecStart tourne dès que le service est actif. Il y a d'autres types (par exemple, si une commande démarre puis se termine, comme un script bash). Cependant, dans la plupart des cas, j'imagine que « simple » sera suffisant. Puis je règle l'utilisateur avec mon nom d'utilisateur, pour m'assurer que le service peut accéder à mes fichiers d'applis et aux Gems installés.
 +
 +En parlant de Gems, j'ai besoin de configurer les variables d'environnement pour pointer sur les chemins de mes répertoires .gem ; autrement, le service ne trouvera pas les commandes correctes. La plupart des articles que j'ai vus à ce sujet affirment que « bash -lc » chargera le profil shell de l'utilisateur (et par conséquent les variables), mais ça ne semble pas être le cas dans ArchLinux. Si vous voulez tester pour voir si ces lignes sont nécessaires sur votre machine, il suffit de les supprimer, puis de vérifier la sortie de votre service par journalctl.
  
 **Lastly, I set the WorkingDirectory (path to my app files), and then ExecStart to run bundle exec rails server. **Lastly, I set the WorkingDirectory (path to my app files), and then ExecStart to run bundle exec rails server.
Ligne 44: Ligne 78:
  
 To stop/disable the service, just replace start or enable with the word stop or disable. Similarly, you can run status to get the exit code and current status of the service.** To stop/disable the service, just replace start or enable with the word stop or disable. Similarly, you can run status to get the exit code and current status of the service.**
 +
 +Enfin, je paramètre WorkingDirectory (répertoire de travail - le chemin vers mes fichiers d'applis), puis ExecStart pour tourner conjointement avec le serveur rails.
 +
 +Les autres options sont assez compréhensibles par elles-mêmes, ou n'ont pas besoin d'être modifiées.
 +
 +Copiez/déplacez le fichier dans /etc/systemd/system/  et appelez-le <quelque-chose>.service (la partie <quelque-chose> peut être ce que vous voulez). Une fois que le fichier est là, vous pouvez le démarrer/l'activer avec les commandes suivantes :
 +
 +sudo systemctl start media-tracker.service
 +
 +sudo systemctl enable media-tracker.service
 +
 +Pour arrêter/désactiver le service, il suffit de remplacer start ou enable par le mot stop ou disable. De même, vous pouvez lancer status pour obtenir le code de sortie et l'état actuel du service.
  
 **If you make changes to the service file, you may get a warning that the files need to be reloaded. To do that, run: **If you make changes to the service file, you may get a warning that the files need to be reloaded. To do that, run:
Ligne 60: Ligne 106:
  
 The main difference between this and the system-wide service file is the missing “User” value.** The main difference between this and the system-wide service file is the missing “User” value.**
 +
 +Si vous faites des modifications dans le fichier du service, vous pourriez recevoir un avertissement disant que les fichiers doivent être rechargés. Pour ce faire, lancez :
 +
 +sudo systemctl daemon-reload
 +
 +Pour déboguer les problèmes, vous pouvez utiliser la commande suivante :
 +
 +journalctl -u media-tracker
 +
 +Remplacez media-tracker par le nom de fichier que vous avez choisi.
 +
 +Fichier de service spécifique pour un utilisateur
 +
 +Le fichier que j'ai créé pour un service spécifique à un utilisateur ressemble au code présenté ci-dessus.
 +
 +La principale différence entre lui et le fichier service à l'échelle du système est l'absence de la valeur « User » (Utilisateur).
  
 **As I said in the section above (for anyone jumping directly to this section): **As I said in the section above (for anyone jumping directly to this section):
Ligne 66: Ligne 128:
 3. The /bin/bash -lc should run the bash shell as a login shell, but, under ArchLinux, this doesn’t seem to fill the environment variables, hence why point 1 exists. 3. The /bin/bash -lc should run the bash shell as a login shell, but, under ArchLinux, this doesn’t seem to fill the environment variables, hence why point 1 exists.
 4. The other options in the file are self-explanatory, or, in the case of WantedBy, shouldn’t need to be adjusted.** 4. The other options in the file are self-explanatory, or, in the case of WantedBy, shouldn’t need to be adjusted.**
 +
 +Comme je l'ai dit dans la section au-dessus (pour tous ceux qui sont passés directement à cette section) :
 +1. Paramétrez les variables d'environnement dont vous aurez besoin pour ce service.
 +2. Réglez l'option WorkingDirectory sur le dossier du projet.
 +3. Le /bin/bash -lc devrait lancer le shell bash comme shell à la connexion, mais, sous ArchLinux, ça ne semble pas remplir les variables d'environnement ; c'est pourquoi le point 1 existe.
 +4. Les autres options dans le fichier se comprennent d'elles-mêmes ou, dans le cas de WantedBy, ne devrait pas nécessiter d'ajustement. 
  
 **Running the service **Running the service
Ligne 74: Ligne 142:
  
 Note the lack of sudo, and the “--user” argument. The other commands are all of the same format - stop, enable, disable, and status. Just replace the word “start” with whatever option you need.** Note the lack of sudo, and the “--user” argument. The other commands are all of the same format - stop, enable, disable, and status. Just replace the word “start” with whatever option you need.**
 +
 +Faire tourner le service
 +
 +Le lancement du service spécifique à un utilisateur est aussi facile que :
 +
 +systemctl --user start media-tracker
 +
 +Notez l'absence de sudo et l'argument « --user ». Les autres commandes sont toutes sur le même format - stop, enable, disable et status. Remplacez simplement le mot start par l'option que vous souhaitez.
  
 **Debug **Debug
  
 In case your service fails to run, you can run journalctl --user -u media-tracker to get the output of your service.** In case your service fails to run, you can run journalctl --user -u media-tracker to get the output of your service.**
 +
 +Débogage
 +
 +Au cas où votre service refuse de fonctionner, vous pouvez lancer journalctl --user -u media-tracker pour obtenir la sortie de votre service.
  
 **Conclusion **Conclusion
  
 I hope this article is useful for anyone who, like me, has a custom program they want to run on every login or boot. It seems like a lot of articles on topics like these focus on system-wide services, which is why I also included instructions for user-specific services. If you run into issues, or have improvements to offer me, feel free to send me an email at lswest34+fcm@gmail.com. Similarly, if you have any article requests, direct them to the same email address.** I hope this article is useful for anyone who, like me, has a custom program they want to run on every login or boot. It seems like a lot of articles on topics like these focus on system-wide services, which is why I also included instructions for user-specific services. If you run into issues, or have improvements to offer me, feel free to send me an email at lswest34+fcm@gmail.com. Similarly, if you have any article requests, direct them to the same email address.**
 +
 +Conclusion
 +
 +J'espère que cet article est utile à tous ceux qui, comme moi, ont un programme personnalisé qu'ils veulent lancer à chaque connexion ou au démarrage. Il semble que beaucoup d'articles sur des sujets comme ceux de cette série se concentrent sur les services à l'échelle du système ; c'est la raison pour laquelle j'ai inclus aussi les instructions pour les services spécfiques à un utilisateur. Si vous rencontrez des problèmes, ou si vous avez des améliorations à m'offrir, n'hésitez pas à m'envoyer un mail à lswest34+fcm@gmail.com. De même, si vous avez des demandes pour des articles, dirigez-les vers la même adresse mail.
  
  
Ligne 92: Ligne 176:
 Pour aller plus loin Pour aller plus loin
  
-https://wiki.archlinux.org/index.php/systemd - L'article d'ArchWiki sur Systemd+https://wiki.archlinux.org/index.php/systemd - L'article d'ArchWiki sur Systemd.
  
 https://wiki.archlinux.org/index.php/Systemd/User - L'article d'ArchWiki sur Systemd basé sur l'utilisateur. https://wiki.archlinux.org/index.php/Systemd/User - L'article d'ArchWiki sur Systemd basé sur l'utilisateur.
issue145/c_c.1559597657.txt.gz · Dernière modification : 2019/06/03 23:34 de d52fr