Cron avec programme C

Fermé
svl - 11 avril 2005 à 15:09
 svl - 21 avril 2005 à 15:51
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.

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
2
Satrialien Messages postés 52 Date d'inscription mercredi 9 mars 2005 Statut Membre Dernière intervention 28 janvier 2006 13
19 avril 2005 à 16:25
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.
0
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.
1
kij_82 Messages postés 4089 Date d'inscription jeudi 7 avril 2005 Statut Contributeur Dernière intervention 30 septembre 2013 857
11 avril 2005 à 15:15
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é.

@++
0
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.
0
kij_82 Messages postés 4089 Date d'inscription jeudi 7 avril 2005 Statut Contributeur Dernière intervention 30 septembre 2013 857
11 avril 2005 à 15:47
Je vois pas et je ne sais pas ce qu'est cron en plus alors..

Désolé, bonne chance ++
0

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 !!
0
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.
0