Commande Shell se lance dans un contexte utilisateur différent dans un scénario

Bonjour

J’avance bien sur la mise en place de mon scenario pour effectuer une sauvegarde sur le Cloud en utilisant RCLONE (voir sujet précédent), merci encore à @jpty
J’effectuerai une petite publication pour expliquer tout le détail pour partage d’expérience.

Pour rappel mon objectif est d’effectuer une copie de sauvegarde sur le Cloud après la réalisation d’une sauvegarde par Jeedom
Pour utiliser Rclone il faut copier le fichier rclone.conf (fichier de configuration) dans le répertoire ’ /var/www/.config/rclone/rclone.conf.
Jusque là pas de soucis, tout fonctionne bien quand je lance manuellement le script.

Pour finaliser le test, j’ai décidé de lancer une sauvegarde manuel de Jeedom, grace à l’évènement provoqué '#end_backup#", mon scénario se déclenche bien automatiquement à la fin de la sauvegarde par contre ma commande Rclone ne fonctionne pas
Le ‹ contexte › utilisateur ne semble pas être le même, en regardant les log, il semblerait que le scénario soit lancé en ‹ Root ›, est ce possible ?
Dans le log il est maintenant indiqué root.config ce qui me semble très surprenant.
Si je relance mon scénario manuellement, tout fonctionne bien, il y a donc bien une différence de comportement entre un lancement manuel et le lancement automatique par Jeedom après la sauvegarde.

Le Log du script via le lancement automatique après sauvegarde Jeedom
Erreur avec Root

2022/01/31 19:08:28 NOTICE: Config file "/root/.config/rclone/rclone.conf" not found - using defaults
2022/01/31 19:08:28 Failed to create file system for "onedrive:/00jeedom/backup": didn’t find section in config file

Puis lancement manuelle du scénario
L’exécution fonctionne sans problème
<6>INFO : backup-Jeedom-4.1.28-2022-01-31-19h06.tar.gz: Copied (new)
<6>INFO :
Transferred: 131.142 MiB / 131.142 MiB, 100%, 7.653 MiB/s, ETA 0s
Checks: 11 / 11, 100%
Transferred: 1 / 1, 100%
Elapsed time: 18.5s

Si dessous le code

/* Lancement de la sauvegarde Jeedom sur OnedDrive */
$cmd = "rclone copy /var/www/html/backup onedrive:/00jeedom/backup -v 2>&1";
$scenario->setLog('Lancement de la commande : '.$cmd);
$result = shell_exec($cmd);
/*$scenario->setLog('Retour de la commande');
$scenario->setLog($result); */

/* Update to tag 'scmessage' pour envoyer au centre de notification */
$tags = $scenario->getTags();
$tags['#scmessage#'] =  "<strong>Résultat de la Sauvegarde </strong> <br> <br>".$result;
$scenario->setTags($tags);

Lancement du mail pour informer de la fin de la sauvegarde (juste pour votre info)

Bonjour,

Le backup est peut-être exécuté par root.

Pour simplifier la configuration de rclone ( la faire uniquement pour root ), il faudrait faire cela:

  • Configurer rclone pour l’utilisateur root et faire exécuter la commande suivante par Jeedom:
$cmd = "sudo rclone copy /var/www/html/backup onedrive:/00jeedom/backup -v 2>&1";

Lien avec le sujet précédent: Commande Shell qui ne s'exécute pas et sans erreur

1 « J'aime »

Une fois encore tu m’as dépanné @jpty , J’ai copié le ficher rclone.conf dans le répertoire root/.config/rclone et cela fonctionne parfaitement avec l’ajout de sudo sur la commande à exécuter.
Pour te dire mon niveau sous Linux, je ne savais pas lancer le gestionnaire de fichiers en mode Root pour copier le fichier :slight_smile: , je sais je ne suis pas un grand fan des lignes de commandes :wink:
Je vais pouvoir laisser tourner quelques jours et je partage un petit article.

1 « J'aime »

Ce sujet a été automatiquement fermé après 24 heures suivant le dernier commentaire. Aucune réponse n’est permise dorénavant.