Les deux révisions précédentesRévision précédenteProchaine révision | Révision précédente |
issue145:c_c [2019/06/07 13:02] – auntiee | issue145:c_c [2019/06/07 15:43] (Version actuelle) – auntiee |
---|
**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. | 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 |
Le fichier media-tracker.service que j'ai créé ressemble au code présenté ci-dessous. | 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. | 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 vu à 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. | 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. |
Le fichier que j'ai créé pour un service spécifique à un utilisateur ressemble au code présenté ci-dessus. | 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 service à l'échelle du système est l'absence de la valeur « User » (Utilisateur). | 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): |
2. Réglez l'option WorkingDirectory sur le dossier du projet. | 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. | 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, cas de WantedBy, elle n'a pas besoin d'être ajustée. | 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 |
systemctl --user start media-tracker | systemctl --user start media-tracker |
| |
Noter 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. | 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 |
Conclusion | Conclusion |
| |
J'espère que cet article est utile à tous ceux qui, comme moi, ont un programme personnalisé qu'ils veulent faire tourner à 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 et c'est la raison pour laquelle j'ai inclus aussi les instructions pour les services spécfiques à un utilisateur. Si vous tombez sur 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. | 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. |
| |
| |
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. |