Forums d'entraide informatique - Les forums de PCW

Version complète : [AIDE]Cron + php avec linux
Vous consultez actuellement la version basse qualité d'un document. Voir la version complète avec le bon formatage.
Bonjour à tous voilà j'ai des soucis
de droit avec fedora, puis des souci avec php alors je largue mon long post en espérant avoir des réponses!!

voila les soucis :

en faite j'ai un repertoire /home/ftp qui contiendra des dossiers personnels pour chaque employés de la société ou je fais mon stage et dans les dossiers des employés ceux ci auront les dossiers de leur client, les clients eux ne pourront que déposer des fichier dans leur répertoire ftp et cela enverra un mail automatique (mail rempli via un formulaire) à l'employé qui le suit avec le lien du fichiers sur le ftp ce qui donne une architecture comme ceux :

/home/ftp/nom_employé/client/fichiers_client

ce que je souhaite c'est supprimé les fichiers se situant dans les dossiers des clients (voir des employés) au bout de 21jours après dépôt

donc j'ai cherché un peu et j'ai trouvé ceux ci :
0 0 * * * /usr/sbin/tmpwatch -m 24 /home/ftp/*/*/*

en gros tout les jours à minuit cela effacera tout les fichiers de plus de 24h
de tout les fichiers, des dossiers et sous dossier

donc j'ai tester ceux ci comme cela :

38 13 6 5 4 /usr/sbin/tmpwatch -tm 1 /home/ftp/*/*/*

pour regarder ce qu'il me proposait d'effacer
et en faite il voulait simplement me supprimer le fichier contenu ici
/home/ftp/martin/sabine/fic.txt
alors qu'il ne m'a pas proposé les 2 fichiers etant dans le dossier /home/ftp/gaelle/fichier1.txt, fichier2.txt
donc techniquement il aurait du me proposer les 2 fichiers la en plus des 2 autres?

le truc c'est que j'ai dépose les fichier1.txt et fichier2.txt y a 2jours et que depuis j'avais pas fait de modif

donc maintenant si je peux faire un script php ou autre bref...

maintenant autre question en php

j'ai encore un mystère que je ne résolu pas en php
$resp = "martin";
$login="sabine"

pour reprendre l'exemple du tmpwatch


voila j'utilise exec('/root/script/Ajout_user.sh ".$resp." ".$login,$output,$retval);
j'ai fais un print_r($output) dans script sh j'ai mis des echo sur les variables $1 $2
j'ai fais un echo de mkdir /home/ftp/$1/$2

et voila ce que ca m'affiche :
$1=martin $2=sabine /home/ftp/martin/sabine

sauf que le dossier ne se créer pas... (alors qu'en commande direct ca marche)
et que si je ne met qu'un paramètre cela fonctionne

l'utilisateur du script étant apache le user:nobody gpe:nobody et j'ai fixé les droits de /home en 777
/home/ftp en 667
/home/ftp/* 666 (ceux de façon récursive donc les sous dossiers sont aussi en 666)
et pourtant par php mon sous dossier ne se crée pas

autre chose dans mon script bash je fais ceci :

si le dossiers existe message d'erreur
sinon
mkdir /home/ftp/$1/$2
chown -R ftp /home/ftp/$1 ==>je veux que l'utilisateur passe ftp car il a des droits differents d'apache
chmod -R 666 /home/ftp/$1 ==>restriction des permissions

la 1er ligne mkdir ne fonctionne pas et la suivante non plus (seul les changements de droits s'effectue...)

le probleme c'est que je dois faire la différence entre employé et client
vu qu'ensuite en fonction du privilège user ou client la personne ne verra pas la même chose.
Dans la page client celui ci ne pourra voir que /home/ftp/employé/le_nom_du_client
et le responsable du client lui verra affiché tous les dossiers contenu dans /home/ftp/nom_du_responsable/*

donc je ne sais pas d'où vient le problème du mkdir vu qu'en commande cela fonctionne , que pour un paramètre cela fonctionne aussi et que pour 2 paramètres ils sont pris en compte mais le dossier ne se crée pas bref je suis dans un mystère non résolu

Donc je fais appel à vous
Merci d'avance
Salut à toi et :bienvenue: Nell95,

Alors, déjà, tmpwatch n'est pas fait pour faire ce que tu fais.

tmpwatch supprimer les fichiers qui n'ont pas été accédés depuis X jours.

Alors que toi tu veux raisonner sur la date de création du fichier. Or sur les OS GNU/Linux il n'y a pas de "date de création du fichier" comme sous Windows. Tu as seulement accès à deux infos :
Date de dernière modification
Date de dernier accès

Donc il faudra resteindre l'accès des employés sur les fichiers des clients par exemple en leur autorisant la lecture mais pas l'écriture (auquel cas ils le copient dans le zone personnelle). Et ensuite raisonner sur cette date de dernière modification.

Tu peux récupérer la date de dernière modification d'un fichier en utilisant (en shell) la commande suivante :


stat monfichiertest -c %x| sed "s/\.[0-9]\{9\}//"

Pour le problème du mkdir c'est réglé
il fallait mettre mkdir -p /home/ftp/$1/$2

concernant les droits et groupe je verrai ca avec mon maitre de stage

ensuite pour la suppression des fichiers dans chaque dossier et sous dossier :

vu que c'est pour du FTP la personne dépose sont fichiers dans le répertoire approprié,
et ensuite elle ne fait rien d'autre,
un mail est envoyé à la personne de son choix lui disant "j'ai déposé un fichier pour toi dans ton dossier voici le lien" ,hop la personne clique sur le lien entre les logins/mdp pour se connecter au serveur ftp et atterrir dans le dossier ou est le fichier.
ensuite le fichier ba il reste dans le dossier à "pourrir"
Vu qu'à partir du moment ou la personne dépose le fichier, le client à 20 jours pour le récupéré (si au bout des 20jour le fichier à pas été accédé c'est poubelle).
Si le client récupère le fichier il y a donc accédé (et sachant qu'il ne récupérera qu'une fois le fichier) donc à partir du moment ou le fichier a été récupéré il sera supprimé sous 20jours aussi vu qu'il n'y aura plus eu d'accès dessus.

donc le tmpwatch peut faire l'affaire je pense.
Salut Nell95,

Ce que je t'expliquais c'est que là par exemple si je reprend ce que tu dis, si ton client s'amuse à télécharger son fichier tous les 19 jours, alors il ne sera jamais supprimé.

Car à chaque téléchargement, la date de dernier accès au fichier sera mise à jour.

D'où le fait qu'il faille utiliser la date de dernière modification... Smile
A juste titre si le document est important et qu'il a besoin de le télécharger il doit rester ca evite de le remettre à chaque fois sur le serveur, et les personnes ne s'amuseront pas à le télécharger plusieurs fois généralement le document tu le prend 1 fois, et je peux réduire aussi le temps de stockage au lieu de mettre 20 jours ne mettre que 10 jours etc...

de toute façon j'ai un problème de droit quand je veux utiliser la fonction
je t'affiche le message d'erreur :

j'avais lancé la commande :

45 11 10 05 1 /usr/sbin/tmpwatch -tm 24 /home/ftp/*/*/*

voila le message d'erreur :

From root@localhost.localdomain Mon May 10 11:41:01 2010
Return-Path: <root@localhost.localdomain>
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by localhost.localdomain (8.14.2/8.14.2) with ESMTP id o4A9f1EE003063
for <root@localhost.localdomain>; Mon, 10 May 2010 11:41:01 +0200
Received: (from root@localhost)
by localhost.localdomain (8.14.2/8.14.2/Submit) id o4A9f1uE003062;
Mon, 10 May 2010 11:41:01 +0200
Date: Mon, 10 May 2010 11:41:01 +0200
Message-Id: <201005100941.o4A9f1uE003062@localhost.localdomain>
From: root@localhost.localdomain (Cron Daemon)
To: root@localhost.localdomain
Subject: Cron <root@localhost> /usr/sbin/tmpwatch -m 1 /home/ftp/*/*/*
Content-Type: text/plain; charset=UTF-8
Auto-Submitted: auto-generated

X-Cron-Env: <SHELL=/bin/sh>
X-Cron-Env: <HOME=/root>
X-Cron-Env: <PATH=/usr/bin:/bin>
X-Cron-Env: <LOGNAME=root>
X-Cron-Env: <USER=root>


error: directory /home/ftp/titi/madonna/admin.php changed right under us!!!
error: this indicates a possible intrusion attempt

ensuite j'ai testé ceci :

55 11 10 05 1 FTP /usr/sbin/tmpwatch -tm 24 /home/ftp/*/*/*

j'ai eu ceci comme message (je dirais normal car le user FTP n'existe pas)

From root@localhost.localdomain Mon May 10 11:50:01 2010
Return-Path: <root@localhost.localdomain>
Received:
from localhost.localdomain (localhost.localdomain [127.0.0.1])
by localhost.localdomain (8.14.2/8.14.2) with ESMTP id o4A9o1ZN003258
for <root@localhost.localdomain>; Mon, 10 May 2010 11:50:01 +0200
Received: (from root@localhost)
by localhost.localdomain (8.14.2/8.14.2/Submit) id o4A9o1jL003257;
Mon, 10 May 2010 11:50:01 +0200
Date: Mon, 10 May 2010 11:50:01 +0200
Message-Id: <201005100950.o4A9o1jL003257@localhost.localdomain>
From: root@localhost.localdomain (Cron Daemon)
To: root@localhost.localdomain
Subject: Cron <root@localhost> FTP /usr/sbin/tmpwatch -m 24 /home/ftp/*/*/*
Content-Type: text/plain; charset=UTF-8
Auto-Submitted: auto-generated
X-Cron-Env: <SHELL=/bin/sh>
X-Cron-Env: <HOME=/root>
X-Cron-Env: <PATH=/usr/bin:/bin>
X-Cron-Env: <LOGNAME=root>
X-Cron-Env: <USER=root>

/bin/sh: FTP: command not found


j'ai refais un essai comme ceci :
55 11 10 05 1 ftp /usr/sbin/tmpwatch -tm 24 /home/ftp/*/*/* => user:ftp existe et par rapport au dossier il a les droits 767

et voici le message que j'ai eu :

From root@localhost.localdomain Mon May 10 12:30:02 2010
Return-Path: <root@localhost.localdomain>
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by localhost.localdomain (8.14.2/8.14.2) with ESMTP id o4AAU1s7004147
for <root@localhost.localdomain>; Mon, 10 May 2010 12:30:01 +0200
Received: (from root@localhost)
by localhost.localdomain (8.14.2/8.14.2/Submit) id o4AAU1JA004146;
Mon, 10 May 2010 12:30:01 +0200
Date: Mon, 10 May 2010 12:30:01 +0200
Message-Id: <201005101030.o4AAU1JA004146@localhost.localdomain>
From: root@localhost.localdomain (Cron Daemon)
To: root@localhost.localdomain
Subject: Cron <root@localhost> ftp /usr/sbin/tmpwatch -m 24 /home/ftp/*/*/*
Content-Type: text/plain; charset=UTF-8
Auto-Submitted: auto-generated
X-Cron-Env: <SHELL=/bin/sh>
X-Cron-Env: <HOME=/root>
X-Cron-Env: <PATH=/usr/bin:/bin>
X-Cron-Env: <LOGNAME=root>
X-Cron-Env: <USER=root>

usage: ftp host-name [port]


j'ai donc essayé de mettre le user du dossier en root mais j'ai le même mess du début

donc si vous avez une idée
Salut,

Désolé pour l'attente.

Attention tu ne peux spécifier l'utilisateur que dans certains fichier de cron. Or là il ne le prend pas en tant que nom d'utilisateur mais en tant que commande (la commande FTP n'existe pas, mais la commande ftp éxiste, et il te dit qu'il manque l'hôte auquel se connecter en paramètre).

Tu insères ces ligne dans quel fichier cron et de quelle manière ?
Des messages ont ete retires par la moderation. Merci de votre comprehension.
URLs de référence