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?
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
.