alexylem / jarvis

Jarvis.sh is a simple configurable multi-lang assistant.
http://openjarvis.com
MIT License
810 stars 197 forks source link

Lancer Jarvis au démarrage #48

Closed alexylem closed 7 years ago

alexylem commented 8 years ago

Description

Proposer une option pour démarrer Jarvis (en mode service) au démarrage.

remjou1 commented 8 years ago

mais... dans l'events on peu mettre jarvis au démarrage en le mettant avec @reboot non ?

alexylem commented 8 years ago

En effet, voir: https://github.com/alexylem/jarvis/wiki/events

Mais j'aimerais faire quelque-chose de plus facile à activer, avec une simple option "Launch at startup" dans les paramètres.

remjou1 commented 8 years ago

mmh mais en soit ce doit pas etre trop compliquer a mettre en place non ?

alexylem commented 8 years ago

Non ce n'est pas compliqué, il y a différentes manières de faire, c'est juste qu'il y a 17 tickets ouverts donc ce n'est qu'une question de priorité 😄

remjou1 commented 8 years ago

oui je vois ça.... grosse masse de travail :)

alexylem commented 8 years ago

Bon finalement je pense que je vais aller au plus simple, une option dans les Settings pour lancer au démarrage qui rajoutera la ligne suivante dans les évènements (si elle n'y est pas déjà)

@reboot ~/jarvis/jarvis.sh -b

A tester quand même...

remjou1 commented 8 years ago

oui c'est plus judicieux et c'est plus facile ;)

kevincaradant commented 8 years ago

@alexylem , c'est fait en temps que lancement de service aujourd'hui ou cela ne fonctionne toujours pas. Je ne l'ai pas encore testé mais je l'ai vu dans le menu de config il me semble ?

alexylem commented 8 years ago

Oui tu peux le lancer comme un service et terminer ton terminal SSH. Par contre si tu dois rebooter ton raspberry Pi, Jarvis ne se relance pas automatiquement. On peux très bien rajouter:

@reboot ~/jarvis/jarvis.sh -b

dans le crontab. L'idée est de proposer cette action automatiquement via un simple setting Jarvis.

ghost commented 8 years ago

@alexylem , Sauf si tu prévoit de d'utiliser Jarvis sur d'autres distribution/materiel.

Il est facile de mettre en place jarvis en tant que service avec systemd. Vu que raspbian est une debian.

alexylem commented 8 years ago

Jarvis est utilisé sur bien d'autres plateformes d'après les utilisateurs (OSX, Ubuntu, ...), donc il est difficile de trouver une méthode universelle... Le crontab est disponible à peu près partout (et utilisé par Jarvis pour les Events).

idem2lyon commented 7 years ago

Oui, mais dans le cas d un shutdown, power off et on, cela ne fonctionne pas. L utilsation du reboot dans le cron de debian est deprecated en plus :) Il faut utiliser le rc.local ou faire son shell dans rc.d

alexylem commented 7 years ago

Merci @idem2lyon je ne savais pas. Je vais regarder ce que tu proposes.

alexylem commented 7 years ago

Email recu d'Olivier:

Il suffit de le poser ds /etc/init.d, de faire un chmod +x et faire un lien symbolique ds le /etc/rc2.d, mais je suppose que tu connais. Peut etre qu'il faudra l'integrer au wizard de l'install pour faire une détection du user et repositionner les chemins


#! /bin/sh

BEGIN INIT INFO

Provides: sshd

Required-Start: $remote_fs $syslog

Required-Stop: $remote_fs $syslog

Default-Start: 2 3 4 5

Default-Stop:

Short-Description: OpenBSD Secure Shell server

END INIT INFO

set -e

umask 022

. /lib/lsb/init-functions

export PATH="${PATH:+$PATH:}/usr/sbin:/sbin"

pidJarvis=$(pgrep jarvis.sh | head -n 1)

say () { pico2wave -l fr-FR -w /tmp/test.wav "$1" aplay -q /tmp/test.wav rm /tmp/test.wav }

check_config () { usernameJarvis=$(cat /home/pi/jarvis/config/username) if [ -z ${usernameJarvis} ]; then echo "Pas de config jarvis pour le user pi" exit 1 fi }

check_start () { if (pgrep jarvis.sh) && [ -e /tmp/jarvis.lock ];then echo [ Jarvis OK ] say "Le service est démarré"
elif ( tail -2 /home/pi/jarvis/jarvis.log | grep ERROR > /dev/null );then say "Le service est arrêté a cause d'une erreur" else echo [ Jarvis KO ] $(tail -10 /home/pi/jarvis/jarvis.log | grep ERROR > /dev/null) say "Le service est arrêté" fi }

case "$1" in start) if [ ! -z $pidJarvis ] && ( pgrep -lf jarvis.sh );then echo "[ Jarvis deja actif ]" else check_config sudo -H -u pi bash -c '/home/pi/jarvis/jarvis.sh -b' sleep 3 check_start fi ;; stop) if [ -e /tmp/jarvis.lock ];then rm /tmp/jarvis.lock; fi for pid in $(pgrep jarvis.sh);do kill -9 $pid;done check_start ;;

status) check_start ;;

restart) if [ -e /tmp/jarvis.lock ];then rm /tmp/jarvis.lock; fi for pid in $(pgrep jarvis.sh);do kill -9 $pid;done check_start if [ ! -z $pidJarvis ] && ( pgrep -lf jarvis.sh );then echo "[ Jarvis deja actif ]" else check_config sudo -H -u pi bash -c '/home/pi/jarvis/jarvis.sh -b' sleep 3 check_start fi ;;

*) echo "Usage: /etc/init.d/ssh {start|stop|restart|status}" exit 1 esac

exit 0



Reste plus qu'à intégrer dans le wizard de Jarvis 😄 
idem2lyon commented 7 years ago

Attention, c'est pour du systemd... Les nouvelles debian sont en systemIV :(

tigre-bleu commented 7 years ago

Sinon il y a beaucoup plus simple - selon moi - pour les distributions utilisant systemd (dont la dernière raspbian):

  1. Créer le fichier /etc/systemd/system/jarvis.service et mettre dedans ceci:
[Unit]
Description=Jarvis
After=syslog.target

[Service]
User=pi
Type=simple
PIDFile=/var/run/jarvis.pid
ExecStart=/opt/jarvis/jarvis.sh -n
ExecStop=/opt/jarvis/jarvis.sh -q
Restart=always

[Install]
WantedBy=multi-user.target
  1. Adapter le nom de l'utilisateur qui fait tourner jarvis ainsi que les chemins si jarvis n'est pas installé dans /opt/jsarvis

  2. Activer le service systemctl enable jarvis et le lancer service jarvis start. Pour le stopper : service jarvis stop

Dorénavant jarvis se lancera automatiquement au démarrage, et se relancera tout seul si jamais il plante.

alexylem commented 7 years ago

Wow @tigre-bleu j'adore le Jarvis qui se relance tout seul. Bon je vais tester ca!!

Oliv4945 commented 7 years ago

Hi, I made a Jarvis plugin based on @tigre-bleu script, it is added to the store Let me now if it works for you

Oliv'

alexylem commented 7 years ago

@Oliv4945 great plugin, very well written. To answer a question in your code:

username=`whoami` # Jarvis username variable is not set ?

$username is defaulted by $(whoami) however users generally change it to whatever nickname they want, ex: "Mon maître" 😄 So you are right to set it to $(whoami)

I may integrate this plugin into Jarvis Core later on.

Oliv4945 commented 7 years ago

Ok, thank you for the clarification on username. I don't know if it is a good idea to merge it into jarvis-core as it can not be used on non systemd based distributions.

alexylem commented 7 years ago

Ok I agree. I am thinking of:

Oliv4945 commented 7 years ago

I think that a "recommended" category is a nice idea :+1:

alexylem commented 7 years ago

550

Tyadors commented 6 years ago

Bonjour,

Je rencontre actuellement un problème pour faire fonctionner le Plugins de démarrage automatique de Jarvis (problème identique en essayant manuellement avec les astuces du ticket ici présent).

Après installation de celui-ci et lors du redémarrage du Raspberry, Jarvis ne démarre pas automatique et l'erreur suite est renvoyé par le service Jarvis

player@raspberrypi:~ $ sudo journalctl -f -u jarvis.service -- Logs begin at Thu 2016-11-03 18:16:43 CET. -- août 10 16:47:16 raspberrypi systemd[1]: Started Jarvis. août 10 16:47:17 raspberrypi jarvis.sh[381]: Notice: you can use 'jarvis' instead of '/home/player/jarvis/jarvis.sh' août 10 16:47:23 raspberrypi jarvis.sh[381]: cityo: Bonjour août 10 16:47:23 raspberrypi jarvis.sh[381]: ERROR: play command failed août 10 16:47:23 raspberrypi jarvis.sh[381]: HELP: Verify your speaker in Settings > Audio > Speaker août 10 16:47:23 raspberrypi jarvis.sh[381]: août 10 16:47:23 raspberrypi systemd[1]: jarvis.service: Main process exited, code=exited, status=1/FAILURE

Je vous avouerais que je sèche un peu et que votre aide me serait précieuse!!!

je précise aussi que manuellement tout est bien fonctionnel (que le démarrage ce fasse normalement ou en tant que service) le réel problème survient lorsque le service doit être lancé au démarrage.

Merci d'avance pour votre temps