INDEX
Récupérer les tweets chaque heure dans un fichier JSON
L’environnement
[root@host monclient]# uname -a Linux hostname.monclient.com 2.6.32-16-pve #1 SMP Mon Oct 22 08:38:13 CEST 2012 x86_64 x86_64 x86_64 GNU/Linux [root@host monclient]# cat /etc/issue CentOS release 5.5 (Final) Kernel \r on an \m
Le path
[root@host monclient]# pwd /usr/local/www/monclient
Le user : apache
[root@host monclient]# nano whoami.php <h1><?php echo exec('whoami') ?></h1>
Bon OK il semble clair que c’est bien le user apache
qui fait tourner le serveur Apache…
Le script à faire tourner
<?php ini_set('display_errors', 1); // create file $twitterCachedFile = "twitter.json"; if (file_exists($twitterCachedFile)) { unlink($twitterCachedFile); } // connect to the twitter api require_once('twoauth/twitteroauth/twitteroauth.php'); define('CONSUMER_KEY', ''); define('CONSUMER_SECRET', ''); define('ACCESS_TOKEN', ''); define('ACCESS_TOKEN_SECRET', ''); $twitter = new TwitterOAuth(CONSUMER_KEY, CONSUMER_SECRET, ACCESS_TOKEN, ACCESS_TOKEN_SECRET); $twitter->host = "https://api.twitter.com/1.1/"; // get the monclient's timeline $json = $twitter->get("statuses/user_timeline.json?count=30&screen_name=monclient"); // create and populate a json copy $fd = fopen($twitterCachedFile, "w+"); fwrite($fd, json_encode($json)); fclose($fd); ?>
Compte tenu des restrictions de sécurité en place sur la machine, le script nécessite un accès root
pour créer/modifier/supprimer des fichiers du filesystem.
sudoers ?
Les autorisations de sudo sont définies dans le fichier /etc/sudoers. Ce fichier doit être édité à l’aide de la commande visudo.
https://fr.wikipedia.org/wiki/Sudoers
Nous allons demander à sudoers
d’autoriser un script .sh
à appeler un ou plusieurs scripts PHP.
Création d’un script bash basique
[root@host monclient]# nano get_twitter.sh #!/usr/bin/php <?php include('get_twitter.php'); exit(); ?>
Puis donner les droits d’exécution :
[root@host monclient]# chmod +x get_twitter.sh Et on teste :
[root@host monclient]# ./get_twitter.sh ok !
Exécution en root sans password
ATTENTION : le fichier des sudoers doit impérativement être modifié avec la commande visudo
!!!
On trouve actuellement en fin de fichier les permissions suivantes :
nagios ALL= (root) NOPASSWD: /usr/lib64/nagios/plugins/check_raid Defaults:nagios !requiretty root ALL=(ALL) ALL
On ajoute celle pour notre script (en premier dans la liste) :
apache ALL= (root) NOPASSWD: /usr/local/www/monclient/get_twitter.sh
Rappel : commandes basiques de vi
i
= insertesc
= quitter le mode insert:
= saisie de commandew
= commande writeq
= commande quit
En cas d’erreur, visudo
vous préviendra :
[root@host monclient]# visudo >>> /etc/sudoers: syntax error near line 100 <<< What now? Options are: (e)dit sudoers file again e(x)it without saving changes to sudoers file (Q)uit and save changes to sudoers file (DANGER!) What now? x
Tâche programmée (crontab
)
Pour lister les taches existantes :
[root@host monclient]# crontab -l 28 21 * * * /etc/webmin/cron/tempdelete.pl 45 * * * * /etc/init.d/daemon_intf restart 1>/dev/null 2>/dev/null
Pour éditer le crontab :
[root@host monclient]# crontab -e
On ajoute cette ligne pour une exécution du script toutes les heures :
0 * * * * /usr/local/www/monclient/get_twitter.sh
Cette fois encore, la syntaxe de vi
s’applique.
Une fois vos modifications enregistrées :
crontab: installing new crontab
Et voilà…