Bonjour à tous,
J’ai récemment éprouvé le besoin de pouvoir effectuer des commandes custom rclone. Je décris plus bas mon besoin et mon code pour info.
Mais bon du coup, j’ai installé rclone sur le docker de mon jeedom pour pouvoir lui lancer ces commandes via des blocs code.
Le problème c’est que évidemment, quand pour une raison ou une autre on doit réinstaller jeedom et restaurer une sauvegarde, alors le rclone n’est plus installé et les scénario ne fonctionnent plus.
Or, je me dis que c’est sans doute idiot d’installer rclone sur mon environnement alors que le plugin plugin-cloudsyncpro est basé sur rclone (je crois) et doit donc avoir ça d’installé qq part.
En plus ce très bon plugin je l’utilise déjà pour ces commande de backup, de limitation d’espace disque et de purge, donc j’ai déjà mes serveurs remote configurés parfaitement (dans mon cas un dropbox et un google drive)
Ma question est donc : comment faire pour lancer des commandes custom en utilisant le rclone installé par le plugin plugin-cloudsyncpro ?
Je mets ci-dessous pour info mes commandes qui utilisent un rclone ajouté et installé manuellement :
Besoin 1 : Compter combien j’ai de backup (en fait ça compte le nombre de fichier dans un répertoire.
Typiquement si ce nombre passe sous un seuil, je n’applique plus la commande de limitation d’espace disque du plugin. En effet il m’est arrivé que l’envoi de backup plante mais que la commande de suppression des fichiers datés de plus de xx jours continuent de fonctionner, et du coup au bout de xx jours on n’a plus de sauvegarde.
Le code est le suivant :
//SaveJeedom
$cmd = "sudo rclone size GoogleDrivePro:'Backup Jeedom' --json";
$scenario->setLog('Lancement de la commande : '.$cmd);
$result = shell_exec($cmd);
$scenario->setLog('Retour de la commande');
$scenario->setLog($result);
$result = json_decode($result);
$result = $result->count;
$scenario->setLog('Nombre de sauvegardes '.$result);
$tags = $scenario->getTags();
$tags['#SaveJeedom#'] = $result;
$scenario->setTags($tags);
Besoin2 : Parfois je peux avoir 2, 3 voire 4 backup pour la même journée car un backup est fait automatiquement à chaque mise à jour d’un plugin (si on le laisse coché). Et ça prend du coup pas mal de place (220Mo par backup pour moi). Et un peu pour rien en plus parce que 3 backups de la même journée c’est un peu trop. J’ai donc mis au point un code pour venir ne garder qu’un seul fichier par jour :
/* Lancement de nettoyage du répertoire de sauvegarde Jeedom pour ne garder qu'un seul fichier par jour */
$remotepath = 'GoogleDrivePro:\'Backup Jeedom\'';
$scenario->setLog('****** On compte le nombre de fichier qu\'on va supprimer *******');
$cmd = 'sudo rclone lsf '.$remotepath.' --files-only --format "pt" --recursive | \
awk -F\';\' \'{print $2, $1}\' | \
sort -k1,1 -k2,2r | \
awk \'{ split($1, datetime, " "); date = datetime[1]; if (date != prev_date) { print "KEEP " $3; prev_date = date } else { print "DELETE " $3 } }\' | \
grep \'^DELETE \' | \
sed \'s/^DELETE //\' | wc -l ';
$scenario->setLog('Lancement de la commande : '.$cmd);
$result = shell_exec($cmd);
$scenario->setLog('Nb de fichiers supprimé(s) : '.$result);
$tags = $scenario->getTags();
$tags['#NettoyageJeedomSave#'] = $result;
$scenario->setTags($tags);
if ($result >= 1)
{
$scenario->setLog('****** On supprime les '.$result.' fichiers *******');
$cmd = 'sudo rclone lsf '.$remotepath.' --files-only --format "pt" --recursive | \
awk -F\';\' \'{print $2, $1}\' | \
sort -k1,1 -k2,2r | \
awk \'{ split($1, datetime, " "); date = datetime[1]; if (date != prev_date) { print "KEEP " $3; prev_date = date } else { print "DELETE " $3 } }\' | \
grep \'^DELETE \' | \
sed \'s/^DELETE //\' | xargs -I {} sudo rclone delete '.$remotepath.'/{}';
$scenario->setLog('Lancement de la commande : '.$cmd);
$result = shell_exec($cmd);
$scenario->setLog('Retour de la commande de suppression (vide si pas d\'erreur) : '.$result);
}
Hier mon jeedom a planté et j’ai donc dû tout réinstaller, avant de réinstaller rclone je demande donc à la communauté son avis avisé !
Merci bcp !