Cron avec programme C
svl
-
svl -
svl -
Bonjour
Savez vous comment on peut programmer une tache planifiée (cron sous linux) à partir d'un programme en C ?
J'ai beau chercher, je ne trouve rien.
SVP, aidez moi et Merci d'avance.
Savez vous comment on peut programmer une tache planifiée (cron sous linux) à partir d'un programme en C ?
J'ai beau chercher, je ne trouve rien.
SVP, aidez moi et Merci d'avance.
6 réponses
-
SALUT A TOUS
J'ai fini par trouver, pour ceux que ça interresse, voici la procédure :
1) Créer un fichier temporaire ( comme l'a indiqué SKZ81) :
FILE *fp;
fp = fopen("/home/temporaire.cron", "w");
fwrite(fp, "ligne cron à rajouter");
fclose(fp);
2) Appeler en commande système le programme 'crontab' avec comme argument le fichier temporaire :
system( "crontab /home/temporaire.cron");
Au final, on obtient les lignes suivantes dans son code source en C :
FILE *fp;
fp = fopen("/home/temporaire.cron", "w");
fwrite(fp, "ligne cron à rajouter");
fclose(fp);
system( "crontab /home/temporaire.cron");
AU REVOIR ET A BIENTÔT-
Salut,
juste une petite précision sur ta solution : s'il y avait déjà des traitements planifiés dans la crontab, ils sont écrabouillés par ton programme. En effet, la commande "crontab [monFichier]" écrase le contenu actuel de la crontab par celui du fichier. Il faudrait que tu récupères dans un fichier le contenu de la crontab avant ton étape 1, en faisant par ex :crontab -l > /home/temporaire.cron
Ensuite, à ton étape 1 tu ouvres le fichier en modification et non plus en écriture, ce qui te permettra de rajouter simplement ta tâche à celles existantes dans le fichier, et le tout sera rechargé par ta commande à l'étape 2.
-
-
Ha merde, j'était un peu dans le gaz...
Pour me rattrapper : à la fin, tu fais un
unlink("/home/temporaire.cron");
histoire de l'effacer. -
Si ca peut t'aider, voilà ce que je ferais :
Pour une tâche planifiée, tu dois avoir une heure de départ, donc tu prend l'heure système au début de ton prog, puis si c'est une tache qui s'effectuee toute les Xminutes (ou heures, ...) tu lance une boucle infinie qui exécute à chaque fois ta tâche, et qui quand elle est terminée endors le programma pendant le temps X.
Sinon, si c'est pour une date donnée, eh bien tu peux comparer la date présente avec celle que tu souhaite et tu endors ton programme en fonction du temps trouvé.
@++ -
petite précision :
J'ai un programme qui doit s'exécuter tous les jours à une heure précise, il me suffirait de rajouter une ligne dans cron avec la commande crontab (procédure manuelle), mais je dois rajouter cette ligne à partir d'un programme en C car l'heure d'éxécution de la tache peut être modifiée à distance. -
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question -
Si tu sais comment faire avec la console, disons en tapant la chaine :
COMMAND ARGUMENTS
(où commande est une commande shell ou un éxé et ARG.. ses arguments)
En C tu fais
system("COMMAND", "ARGUMENTS");
Ce qui éxécute la commande.
Sinon,FILE *fp; fp = fopen("/etc/cron.k", "a+"); // fichier bidon, ça dépend... fwrite(fp, "ligne à rajouter"); fclose(fp);
Dans les deux cas, si tu n'as pas les droits sur le fichier à modifier, c'est foiré d'avance !! -
C'est vrai, le contenu du cron est écrasé.
Mais c'est pas grave dans mon application, car le fichier que j'envoie avec crontab sert à configurer toutes les taches planifiées de la machine.