web-dev-qa-db-fra.com

anacron ne fonctionne pas

J'ai une nouvelle installation de Xubuntu 14.04 32 bits et anacron ne semble pas fonctionner.

J'ai lu qu'il était préférable d'utiliser un travail cron pour couper les disques SSD et qu'Ubuntu avait un travail cron pour le faire. J'ai donc supprimé la suppression de /etc/fstab. Je voulais confirmer que le travail cron fonctionnait. J'ai donc ajouté une commande echo à /etc/cron.weekly/fstrim afin qu'elle ressemble à ceci:

#!/bin/sh
# call fstrim-all to trim all mounted file systems which support it
echo "Trim started on" $(date) >> /home/dominic/Desktop/Trim_Runs
set -e
# This only runs on Intel and Samsung SSDs by default, as some SSDs with faulty
# firmware may encounter data loss problems when running fstrim under high I/O
# load (e. g.  https://launchpad.net/bugs/1259829). You can append the
# --no-model-check option here to disable the vendor check and run fstrim on
# all SSD drives.
exec fstrim-all

Il fonctionne bien depuis un terminal, mais il ne fonctionne jamais comme un travail hebdomadaire. Alors je l'ai déplacé vers cron.daily, mais il ne fonctionne jamais à partir de là non plus. Alors je l'ai déplacé vers cron.hourly, et il fonctionne toutes les heures. Le texte d'écho apparaît dans le fichier et le voyant du lecteur s'allume pendant environ deux minutes. Mais cron.hourly n'utilise pas anacron.

Voici mon fichier crontab. J'ai changé quelques fois, mais cela ne semblait pas fonctionner avec les temps originaux fournis avec Xubuntu non plus.

# /etc/crontab: system-wide crontab
# Unlike any other crontab you don't have to run the `crontab'
# command to install the new version when you edit this file
# and files in /etc/cron.d. These files also have username fields,
# that none of the other crontabs do.

Shell=/bin/sh
 PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

# m h dom mon dow user  command
17 *    * * *   root    cd / && run-parts --report /etc/cron.hourly
25 16   * * *   root    test -x /usr/sbin/anacron || ( cd / && run-parts --report      /etc/cron.daily )
47 6    * * 1   root    test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly )
52 6    1 * *   root    test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly )
#

J'ai testé pour voir s'il fonctionnerait correctement à partir de la crontab de mon utilisateur en mettant le texte suivant dans crontab -e. Puis j'ai attendu quelques minutes jusqu'à 20h10, mais rien ne s'est passé.

Shell=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

10 20   * * *   test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )

Je pense que la syntaxe doit être correcte pour les parties d'exécution, car elle s'exécute lorsque je déplace le script dans cron.hourly.

Il semble que cron fonctionne mais anacron ne l’est pas. Ma question est donc la suivante: que puis-je faire pour que anacron fonctionne?

4
Dominic

Anacron fonctionne sur mon système, comme suit:

Dans /etc/fstab, certains répertoires ont été déplacés vers tmpfs pour éviter les écritures sur le disque SSD, comme ceci:

tmpfs   /tmp       tmpfs   nodev,nosuid,noatime,mode=1777   0  0
tmpfs   /var/spool tmpfs   nodev,nosuid,noatime,mode=1777   0  0
tmpfs   /var/log   tmpfs   nodev,nosuid,noatime,mode=0755   0  0

Cela signifie que /var/spool/anacron/ n'existe pas au moment du démarrage et que, par conséquent, anacron ne fonctionne pas. Les trois fichiers de ce répertoire doivent être préservés tout au long du démarrage du système pour que anacron fonctionne. J'ai donc créé un répertoire /usr/local/etc/anacron/ et, au démarrage, je crée /var/spool/ et j'y ai placé un lien symbolique pointant vers ce répertoire. Désormais, anacron fonctionne car ses trois fichiers (cron.daily, cron.weekly et cron.monthly) sont préservés tout au long de l'amorçage.

En fait, je crée un tas de répertoires au démarrage, comme décrit ici: Comment réparer anacron & cups-pdf quand vous avez/var sur tempfs mais j'ai modifié le script pour qu'il ne crée pas /var/spool/anacron mais crée à la place le lien symbolique mentionné ci-dessus.

Le script résultant ressemble à ceci:

#!/bin/bash

# Script to create required directories in tempfs /var/log (that are not otherwise created).
# This script is needed because I have some directories moved to tmpfs in /etc/fstab.
# That means these directories disappear every time I shut down.
# Programs should create them if they do not exist, but some, like anacron, fail to do   so, and then fail to run.
# So I create them here. I don't know where it gets the permissions from, or whether they are right.
# Thanks to http://blog.philippklaus.de/2011/02/ssd-optimizations-on-linux/ for the list below :-)

for dir in apparmor apt ConsoleKit cups dist-upgrade fsck gdm hp installer lightdm news ntpstats samba speech-dispatcher unattended-upgrades upstart; do
  if [ ! -d /var/log/$dir ] ; then
    mkdir /var/log/$dir
  fi
done

# And in /var/spool.
for dir in cups-pdf; do
  if [ ! -d /var/spool/$dir ] ; then
    mkdir /var/spool/$dir
  fi
done

# Create the symlink.
ln -s /usr/local/etc/anacron /var/spool/anacron

Le script ci-dessus se trouve dans mon répertoire personnel et est exécuté au démarrage par une commande dans /etc/rc.local, comme décrit dans l'article lié.

Peut-être que la vraie solution à ce problème serait que anacron stocke cron.daily, cron.weekly et cron.monthly dans un répertoire dans lequel l'utilisateur ne passera probablement pas à tmpfs.

1
Dominic