J’ai installé Nextcloud (19.0.1) sur un Synology via docker. Tout fonctionne bien.
Cependant les taches de fonds ne s’exécutent pas. Sur aucun des choix possible (AJAX, WebCron, et Cron).
Déjà, 1ere question : Est ce grave ?
Et la 2ème : HELP, comment faire pour que ça fonctionne ?
J’ai essayé de relier via easycron, mais rien ne change, j’ai toujours un message dans l’interface admin qui me dit : “Certaines tâches n’ont pas été exécutées depuis 1il y a 3 jours. Veuillez envisager de passer à un système cron.”
Sur easycron, j’ai le message “success” qui apparait.
Cette partie la j’ai laissé en auto, car c’était sur AJAX et j’ai pas eu le besoin de le changer.
La aucune actualisation des taches de fond ne fonctionne donc j’ai voulu changer en webcron et rien non plus.
Pour cron… j’ai rien fait.
Mon fichier cron.php est comme ça :
<?php
/**
* @copyright Copyright (c) 2016, ownCloud, Inc.
*
* @author Artem Sidorenko
* @author Christopher Schäpers
* @author Christoph Wurst
* @author Damjan Georgievski
* @author Daniel Kesselberg
* @author Jakob Sack
* @author Joas Schilling
* @author Jörn Friedrich Dreyer
* @author Ko-
* @author Michael Kuhn
* @author Morris Jobke
* @author Oliver Kohl D.Sc.
* @author Robin Appelman
* @author Roeland Jago Douma
* @author Steffen Lindner
* @author Thomas Müller
* @author Vincent Petry
*
* @license AGPL-3.0
*
* This code is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License, version 3,
* as published by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License, version 3,
* along with this program. If not, see
*
*/
require_once __DIR__ . '/lib/versioncheck.php';
try {
require_once __DIR__ . '/lib/base.php';
if (\OCP\Util::needUpgrade()) {
\OC::$server->getLogger()->debug('Update required, skipping cron', ['app' => 'cron']);
exit;
}
if ((bool) \OC::$server->getSystemConfig()->getValue('maintenance', false)) {
\OC::$server->getLogger()->debug('We are in maintenance mode, skipping cron', ['app' => 'cron']);
exit;
}
// load all apps to get all api routes properly setup
OC_App::loadApps();
\OC::$server->getSession()->close();
// initialize a dummy memory session
$session = new \OC\Session\Memory('');
$cryptoWrapper = \OC::$server->getSessionCryptoWrapper();
$session = $cryptoWrapper->wrapSession($session);
\OC::$server->setSession($session);
$logger = \OC::$server->getLogger();
$config = \OC::$server->getConfig();
// Don't do anything if Nextcloud has not been installed
if (!$config->getSystemValue('installed', false)) {
exit(0);
}
\OC::$server->getTempManager()->cleanOld();
// Exit if background jobs are disabled!
$appMode = $config->getAppValue('core', 'backgroundjobs_mode', 'ajax');
if ($appMode === 'none') {
if (OC::$CLI) {
echo 'Background Jobs are disabled!' . PHP_EOL;
} else {
OC_JSON::error(['data' => ['message' => 'Background jobs disabled!']]);
}
exit(1);
}
if (OC::$CLI) {
// set to run indefinitely if needed
if (strpos(@ini_get('disable_functions'), 'set_time_limit') === false) {
@set_time_limit(0);
}
// the cron job must be executed with the right user
if (!function_exists('posix_getuid')) {
echo "The posix extensions are required - see http://php.net/manual/en/book.posix.php" . PHP_EOL;
exit(1);
}
$user = posix_getpwuid(posix_getuid());
$configUser = posix_getpwuid(fileowner(OC::$configDir . 'config.php'));
if ($user['name'] !== $configUser['name']) {
echo "Console has to be executed with the user that owns the file config/config.php" . PHP_EOL;
echo "Current user: " . $user['name'] . PHP_EOL;
echo "Owner of config.php: " . $configUser['name'] . PHP_EOL;
exit(1);
}
// We call Nextcloud from the CLI (aka cron)
if ($appMode !== 'cron') {
$config->setAppValue('core', 'backgroundjobs_mode', 'cron');
}
// Work
$jobList = \OC::$server->getJobList();
// We only ask for jobs for 14 minutes, because after 5 minutes the next
// system cron task should spawn and we want to have at most three
// cron jobs running in parallel.
$endTime = time() + 14 * 60;
$executedJobs = [];
while ($job = $jobList->getNext()) {
if (isset($executedJobs[$job->getId()])) {
$jobList->unlockJob($job);
break;
}
$job->execute($jobList, $logger);
// clean up after unclean jobs
\OC_Util::tearDownFS();
$jobList->setLastJob($job);
$executedJobs[$job->getId()] = true;
unset($job);
if (time() > $endTime) {
break;
}
}
} else {
// We call cron.php from some website
if ($appMode === 'cron') {
// Cron is cron :-P
OC_JSON::error(['data' => ['message' => 'Backgroundjobs are using system cron!']]);
} else {
// Work and success :-)
$jobList = \OC::$server->getJobList();
$job = $jobList->getNext();
if ($job != null) {
$job->execute($jobList, $logger);
$jobList->setLastJob($job);
}
OC_JSON::success();
}
}
// Log the successful cron execution
$config->setAppValue('core', 'lastcron', time());
exit();
} catch (Exception $ex) {
\OC::$server->getLogger()->logException($ex, ['app' => 'cron']);
} catch (Error $ex) {
\OC::$server->getLogger()->logException($ex, ['app' => 'cron']);
}
Si tas rien fait pour cron, c normal que ça fonctionne pas. Il faut sélectionner cron dans les paramètres admin, puis installer crontab sir ton serveur pour éditer le fichier crontab de www-data
Le fichier cron.php est un fichier exécutable que crontab exécutera toutes les 5 mn si c’est bien configuré. Le contenu de cron.php est sans intérêt.
Salut,
Honnêtement… Je sais pas. Je ne suis pas familier des NAS. J’ai pu voir plusieurs tuto sur internet en tapant “crontab nas” qui peuvent aider mais ils ne s’accordent pas tous. Par exemple celui là sous entend quon peut le faire très simplement via l’interface du nas.
Hello,
Je suis intéresse car j’ai le même soucis.
J’ai d’abord essayé via EasyCron et même s’il m’indique “Success” j’ai toujours le message m’indiquant que certaines (lesquelles ?) taches n’ont pas été exécuté depuis x temps.
J’ai également essayé de planifier une tache Cron sur mon syno au travers d’une tache planifiée avec un script de type : curl “http://adresseduserveur/cron.php” mais, même si le serveur exécute la tâche sans erreur, toute les 5 min, le message reste le même avec cependant une icône Orange au lieu de rouge avec EasyCron. Le message ne change pas.
Comment connaitre les tâches qui ne s’exécutent pas ? Comment etre sur que les tâches actuelles s’exécutent correctement ?
Est ce que mon script est correct ?