forked from DSI-Universite-Rennes2/isou
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathcron.php
129 lines (100 loc) · 3.82 KB
/
cron.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
<?php
/**
* This file is part of isou project.
*
* @author Université Rennes 2 - DSI <dsi-contact@univ-rennes2.fr>
* @license The Unlicense <http://unlicense.org>
*/
declare(strict_types=1);
use UniversiteRennes2\Isou\Plugin;
// Vérification que le script est bien exécuté en CLI.
if (defined('STDIN') === false) {
die();
}
require __DIR__.'/config.php';
$starttime = microtime(true);
$LOGGER->info('Début du cron '.strftime('%c'));
// Force la définition du niveau d'erreurs.
error_reporting(-1);
ini_set('error', LOGS_PATH.'/php_errors.log');
ini_set('display_errors', 'On');
require PRIVATE_PATH.'/php/common/database.php';
// Charge la configuration.
require PRIVATE_PATH.'/libs/configuration.php';
$CFG = get_configurations();
// Vérifie si un nouvelle version n'est pas en cours d'installation.
if (has_new_version() === true) {
$LOGGER->info('Une nouvelle version est en cours d\'installation.');
exit(0);
}
// Charge les plugins.
$plugins = get_plugins();
// Crée un fichier cron.pid.
$pid_file = PRIVATE_PATH.'/cron.pid';
if (is_file($pid_file) === true) {
echo 'Le fichier '.$pid_file.' existe déjà. Un processus du cron est en cours ?';
$pid = file_get_contents($pid_file);
if (ctype_digit($pid) === true && file_exists('/proc/'.$pid) === true) {
// Le pid correspond à un processus en cours...
echo ' Oui !'.PHP_EOL;
// Si le fichier existe depuis plus de 10 minutes, alerter les admins.
$atime = fileatime($pid_file);
if ($atime !== false && ($atime + (10 * 60)) < TIME) {
error_log('Le fichier \''.$pid_file.'\' a été créé depuis plus de 10 minutes.'.PHP_EOL.
'Il est probablement nécessaire de tuer le processus '.$pid.'.');
exit(1);
}
// On quitte ce processus pour ne pas interférer avec l'autre processus en cours.
exit(0);
} else {
// Le pid ne correspond à aucun processus en cours...
echo ' Non.'.PHP_EOL;
unlink($pid_file);
echo 'Aucun processus en cours n\'a pour identifiant '.$pid.'.'.PHP_EOL;
echo 'Le fichier '.$pid_file.' a été supprimé.'.PHP_EOL;
}
}
file_put_contents($pid_file, getmypid());
require_once PRIVATE_PATH.'/libs/cron.php';
// Met à jour les backends.
$plugins = Plugin::get_records(array('active' => true, 'type' => 'monitoring'));
foreach ($plugins as $plugin) {
if ($plugin->codename === 'isou') {
continue;
}
$plugin_library_file = PRIVATE_PATH.'/plugins/monitoring/'.$plugin->codename.'/lib.php';
if (is_readable($plugin_library_file) === false) {
$LOGGER->warning('Le fichier "'.$plugin_library_file.'" n\'existe pas.');
continue;
}
require $plugin_library_file;
$function_name = 'plugin_'.$plugin->codename.'_update';
if (function_exists($function_name) === false) {
$LOGGER->warning('La fonction "'.$function_name.'" n\'existe pas.');
continue;
}
if ($function_name($plugin) === false) {
$LOGGER->warning('La mise à jour du backend "'.$plugin->codename.'" ne s\'est pas passé correctement.');
}
}
// Met à jour les services ISOU.
update_services_tree();
// On regénère le fichier isou.json.
cron_regenerate_json();
// Nettoie les anciens évènements des plugins autres qu'Isou.
cron_delete_old_plugin_events();
// Met à jour la base de données.
$sql = "UPDATE configuration SET value = :value WHERE key = :key";
$query = $DB->prepare($sql);
$query->execute(array(':value' => strftime('%FT%T'), ':key' => 'last_cron_update'));
// Notifications.
if ($CFG['notifications_enabled'] === '1') {
cron_notify();
}
// Report.
if ($CFG['report_enabled'] === '1') {
cron_report();
}
unlink($pid_file);
$LOGGER->info('Temps d\'exécution : '.(microtime(true) - $starttime).' secondes.');
$LOGGER->info('Fin du cron '.strftime('%c'));