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à…

