#Linux : un problème de Cron

Salut,

  • Sous MacOs, par paresse j’utilisais Hazle qui permet, en gros, d’effectuer automatiquement des opérations de trie sur des fichiers.
    Par exemple tous les pdf qui sont téléchargés sont déplacés automatiquement dans un dossier appelé pdf.
    La veille sur les dossiers se configure il me semble, mais en gros une fois la règle établi, on s’occupe plus de rien. Un bon logiciel.

  • Sous Linux.
    j’utilise un truc en python vraiment pas mal qui s’appelle organize. On définit les règles dans un fichier yaml, et pour les appliquer on exécute:

organize run

Et zou, il examine les dossiers et effectue les opérations de trie.
Naturellement je souhaiterais ne pas avoir à rentrer cette commande, et qu’elle s’effectue périodiquement -> make a cron job quoi.

J’ai donc crée un petit script nullissime qui contient cette commande

#!/bin/bash
organize run

Mon script fonctionne quand je le rentre moi-même à la main.
Mais il ne se passe rien lorsque je le fais exécuter par cron.
La commande :

journalctl -xb -u cronie

me donne :

/etc/cron.minutely/orga: ligne 2: organize : commande introuvable)
(run-parts: /etc/cron.minutely/orga exited with return code 127)

si je mets le chemin complet obtenu avec which dans mon script j’obtiens :

(ModuleNotFoundError: No module named 'organize')
(run-parts: /etc/cron.minutely/orga exited with return code 1)

Est-ce que c’est l’argument « run » qui fait le bug ?
J’ai évidemment tenter de googler le truc mais avec un nom de programme pareil, j’épluche toujours les pages de résultats.
De plus, le programme est assez connu et utilisé, si je ne trouve rien pour résoudre ce problème simple qui est du domaine de l’utilisation normale de ce programme c’est sans doute que le problème c’est moi. L’entropie massive de 2020 ne semble pas en cause ici.

Si jamais vous avez une idée…est-ce que je rate un truc évident ?

nb: Merci d’avance pour les solutions à la GZ qui pourraient poper. Je pourrais sans doute effectuer ces opérations à l’aide du bash, je pense. Mais j’aimerais comprendre ce que je rate. Si c’est bien PEBCAK.

Il faut voir comment est installé organize. Quand un cron execute un programme, ce n’est pas par défaut avec ton user mais en root (il me semble). Le plus safe c’est de mettre le chemin complet vers l’executable, ce que tu as fais, c’est cool.

Mais il faut t’assurer que l’utilisateur avec lequel cron va exécuter ton programme ai un environnement Pyton fonctionnel et compatible avec ton programme.

pour les pbs de Crom il faut appeler Conan!

Sinon on dirait un pb de droit/environnement de ton cron qui doit s’executer avec un truc différent de toi

1 J'aime

@KaD @nusul
merci je vais checker.

Cron tel que tu l’utilise lance la commande en root avec un env quasi vide. Si ton app utilise un env virtuel python il faut que tu pointe sur l’exécutable python qui est dans cet env. Sinon tente de forcer HOME HOME et PYTHONPATH dans ton script

HOME=/user/xxx
PYTHONPATH=/user/xxx/organize 

Ou force le chargement de ton profil utilisateur ( /user/xxx/.profile ou ce qui corresponds au shell utilisé)

1 J'aime

@Sarbian
Merci pour toutes ces pistes je vais creuser.

Je vais faire mon casse couille mais un script utilisateur n’a rien a foutre dans le cron système, même si c’est ta machine perso gniagniagnia. Il faut faire les choses propres de base.

Il existe sûrement des outils graphique mais je ne les connais pas, donc je vais te parler du cron utilisateur.

via une console, tape simplement
crontab -e
Il va t’ouvrir ton éditeur par défaut (souvent nano) pour éditer une table cron vide (détails ici https://linux.die.net/man/5/crontab ), mais voici un exemple:

# run five minutes after midnight, every day
5 0 * * *       $HOME/orga >> $HOME/tmp/out 2>&1

En imaginant que ton script s’appelle orga.
Dans le script, tu vas devoir activer ton environnement utilisateur. En fonction de ta distribution, il peut être dans .bashrc ou dans .profile. Rajoute dans ton script, juste après /bin/bash :
source $HOME/.profile

Ton environnement python sera alors actif et le script python pourra fonctionner.

Mais je le répète: PAS de script user dans le cron système!!!

4 J'aimes

Merde c’est con je venais justement de trouver la solution.
merci @kad, @nusul et @Sarbian.

runuser -l  GZISGREAT -c '/home/GZISGREAT/.local/bin/organize run'

fonctionne nickel.

Mais je vais t’écouter @LoneWolf. Merci

Done.
Ça marche Nickel. Thanks.

Si un modo peu fermer…