Synology besoins d'aide pour créer un script.

xavax

Chevalier Jedi
10 Mars 2021
162
6
18
Bonjour,
je voudrais faire un script dans le planificateur de tache pour executer un action.
J'ai suivi ce tuto pour installer adguard sans docker https://www.cachem.fr/adguard-home-nas-synology-sans-docker/
Dans ce tuto il est expliqué comment créer une tache pour démarrer adguard au demarrage du NAS.
Ca fonctionne, avec cette commande
1643192600976.png
J'utilise un systeme domotique (jeedom) qui peut voir l'etat d'adguard.
je voudrais faire un script qui permet de recuperer l'etat d'adguard dans jeedom et pouvoir relancé adguard s'il est plante.

J'avais deja trouvé un tuto pour récupérer l'etat d'une commande dans jeedom donc ca je peux y arriver mais je ne sais pas comment ensuite executer

Code:
#!/bin/sh
set -o errexit

# Récupération de l’état souhaité depuis l’API
STATE=$(curl "urlsdelacommandejeedom&type=cmd&id=numerodelacommandejeedom")

# Choix de l‘action à effectuer en fonction du retour de l’API
if [ "$STATE" -eq 0 ]; then
    ACTION="Power OFF"
    /sbin/poweroff
else
    ACTION="Power ON"
fi

# Exécution de l’action programmée
echo "$ACTION"

exit 0

je voudrais un truc de meme genre mais au lieu d'eteindre le nas je voudrais executer adguard comme dans le tuto

Merci pour votre aide
 
Dernière édition par un modérateur:
Salut,
Il te faudrait donc faire une truc comme cela ? ( mon niveau est faible en script attention ^^ )

Code:
#!/bin/sh
# Récupération de l’état souhaité depuis l’API
STATE=$(curl "urlsdelacommandejeedom&type=cmd&id=numerodelacommandejeedom")

# Choix de l‘action à effectuer en fonction du retour de l’API
if [ "$STATE" -eq 0 ]; then # Si l'API indique 0 alors on démarre Adguard
   cd /volume1/homes/cachem/AdGuardHome
  ./AdGuardHome
fi

exit 0

Dans DSM, tu en fait une tache planifié qui s'execute tout les X temps. On peu ensuite également meme, y inclure un systeme de notification, ...
 
merci, oui c'est un truc comme ca que je voudrais.
J'ai testé mais ca n'a pas fonctionné...
 
@xavax
Pourrais-tu expliciter ce que tu veux faire ? Car j'ai pas vraiment compris... autre que l'utilisation d'un script pour lancer adguard...
Pourquoi ne pas le laisser lancer en permanence ?
 
En fait si je le laisse en permanence mais hier il a planté... je ne sais pas pourquoi du coup qd il plante je voudrais le relancer automatiquement.
Car a la maison il n'y avait plus rien qui fonctionnait du coup.... si le DNS est HS
 
En fait si je le laisse en permanence mais hier il a planté... je ne sais pas pourquoi du coup qd il plante je voudrais le relancer automatiquement.
Car a la maison il n'y avait plus rien qui fonctionnait du coup.... si le DNS est HS
Pour celà, il y a le healthcheck ;)
Moi j'ai ça dans mon docker-compose.yml :
YAML:
    restart: unless-stopped

    healthcheck:
      test: "/bin/netstat -pant | /bin/grep 53"
      interval: 45s
      timeout: 30s
      retries: 3
 
Ha merde...
Y a plus qu'à mettre AdGuard dans un Docker :D
Sinon peut-être que la commande du healthest pourra donner une idée pour le script ;)
 
Essaye la commande qui est présente dans le healthcheck :
Bash:
/bin/netstat -pant | /bin/grep 53
Par contre, c'est à lancer dans le conteneur ;)
Je ne me souviens plus trop de la commande docker à lancer pour lancer une commande à l'intérieur du conteneur...
@EVOTk @FX Cachem @maxou56 @oracle7 Si vous savez ;)

edit : j'ai encore gauffré ma réponse ? il n'utilise pas docker ?
 
Dernière édition:
  • Haha
Réactions: EVO
Bash:
#! /bin/sh
echo "Test AdGuardHome"
if pidof AdGuardHome ; then
echo "AdGuardHome fonctionne"
else
./volume1/homes/cachem/AdGuardHome
echo "Lancement AdGuardHome..."
fi
Je n'ai pas testé le code... Est-ce que ça pourrait te convenir @xavax ?
 
  • J'aime
Réactions: MilesTEG et EVO
Et je me rends compte que j'ai encore répondu en pensant à Docker... J'ai édité mon précédent message :eek:
Message automatiquement fusionné :

C'est pas bien de se moquer ?
 
Dernière édition:
  • Haha
Réactions: FX Cachem
Mon code pour aller chercher la commande jeedom fonctionne….
En fait mon url pour relever l’info jeedom était sur l’accès externe … du coup sans dns ça ne fonctionne pas …. J’ai mis l’adresse avec l’ip locale et la va fonctionne.

Donc ce code fonctionne

Code:
#!/bin/sh
# Récupération de l’état souhaité depuis l’API
STATE=$(curl "urlsdelacommandejeedom&type=cmd&id=numerodelacommandejeedom")

# Choix de l‘action à effectuer en fonction du retour de l’API
if [ "$STATE" -eq 0 ]; then # Si l'API indique 0 alors on démarre Adguard
   cd /volume1/homes/cachem/AdGuardHome
  ./AdGuardHome
fi

exit 0

Maintenant c’est vrai que s’il peut vérifier directement le processus sur le NAS c’est mieux.
Je vais tester le code de @FX Cachem


Code:
#! /bin/sh
echo "Test AdGuardHome"
if pidof AdGuardHome ; then
echo "AdGuardHome fonctionne"
else
./volume1/homes/cachem/AdGuardHome
echo "Lancement AdGuardHome..."
fi

Dans ce code il ne faut pas mettre cd…. ?

Pour faire des tests j’arrête le processus en rebootant le NAS. Il n’y a pas moyen d’arrêter un processus sans le rebooter ?

Encore merci
 
Dans ce code il ne faut pas mettre cd…. ?
A tester, ça devrait fonctionner :)
Pour tuer un processus facilement (en SSH), tu peux faire :
Bash:
pidof AdGuardHome
Il te retourne un PID (exemple 3913). Ensuite, tu tapes :
Bash:
kill 3913
Le processus AdGuardHome ne tourne plus

ou encore plus simple, en une seule ligne :
Bash:
kill $(pidof AdGuardHome)
:D
J'espère que ça va pouvoir t'aider...
 
J'ai reussi a me connecger en SSH mais je ne peux pas trop tester ma femme est en teletravail.... :)
du coup je peux essayer cette commande pour voir ce que ca reponds ?
Code:
echo "Test AdGuardHome"
 
  • J'aime
Réactions: FX Cachem
j'ai testé ceci dans le terminal du mac en SSH sur le syno :
Code:
xavvier@Syno:~$ #! /bin/sh

xavvier@Syno:~$ echo "Test AdGuardHome"

Test AdGuardHome

xavvier@Syno:~$

ca donne ca. Ca veut dire quoi ?
 
La première lige du script : #! /bin/sh c'est ce qu'on appelle la ligne Shebang. Elle sert à indiquer au shell quel binaire utiliser pour exécuter les commandes du script qui va suivre.
 
  • J'aime
Réactions: xavax
je viens de tester mais j'ai du mettre ceci dans le fichier .sh
Code:
#! /bin/sh
echo "Test AdGuardHome"
if pidof AdGuardHome ; then
echo "AdGuardHome fonctionne"
else
cd /volume1/ftp/AdGuardHome
./AdGuardHome
echo "Lancement AdGuardHome..."
fi


ca n'a pas fonctionné avec ceci :

Code:
#! /bin/sh
echo "Test AdGuardHome"
if pidof AdGuardHome ; then
echo "AdGuardHome fonctionne"
else
./volume1/ftp/AdGuardHome
echo "Lancement AdGuardHome..."
fi

Savez vous pourquoi ?
en tapant ceci directement dans le terminal ca repond ca mais il n'apparait pas dans les processus :
Code:
xavvier@Syno:~$ if pidof AdGuardHome ; then
> echo "AdGuardHome fonctionne"
> else
> ./volume1/ftp/AdGuardHome
> echo "Lancement AdGuardHome..."
> fi
-sh: ./volume1/ftp/AdGuardHome: No such file or directory
Lancement AdGuardHome...


Ce script, il faut le programmer toute les 5 minutes ou juste au demarrage ?
Car a chaque fois que je demarre j'ai ceci qui s'ajoute dans le processus

1643442209120.png


Et concernat adguard je ne sais pas is j'ouvre un nouveau sujet ou si je peux poser directement ici. J'ai un routeur unifi, j'ai donc parametré le DNS en IPV4 et IPV6. mais dans ip V6 je dois prendre quelle adresse ? en testant mes scripts je me suis rendu compte que meme avec le syno eteint m'accédais a internet sur certaines machine. Du coup je pense que ca vient du pramaetrage du DNS IPV6
 
Dernière édition: