anacron não está funcionando


4

Eu tenho uma instalação limpa do Xubuntu 14.04 de 32 bits e anacronnão parece estar funcionando.

Eu li que é melhor usar um trabalho cron para aparar SSDs, e que o Ubuntu tem um trabalho cron para fazer isso, então removi o descarte /etc/fstab. Eu queria confirmar que o trabalho cron estava funcionando, então adicionei um echocomando para /etc/cron.weekly/fstrimque fique assim:

#!/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

Ele roda bem em um terminal, mas nunca é executado como um trabalho semanal. Então mudei para cron.daily, mas ele também nunca sai daí. Então mudei para cron.hourly, e ele funciona a cada hora. O texto do eco aparece no arquivo e a luz da unidade acende por cerca de dois minutos. Mas cron.hourlynão usa anacron.

Aqui está o meu crontabarquivo. Eu mudei algumas vezes, mas também não parecia funcionar com os tempos originais que vieram com o Xubuntu.

# /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 )
#

Testei para ver se ele funcionaria corretamente no crontab do meu usuário, colocando o seguinte no crontab -e. Então esperei alguns minutos até as 20h10, mas nada aconteceu.

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 )

Eu acho que deve ter a sintaxe correta para as partes de execução, porque é executado quando eu movo o script cron.hourly.

Parece que cronestá funcionando, mas anacronnão está. Então, minha pergunta é: o que posso fazer para começar a anacrontrabalhar?


3
Você poderia nos mostrar as linhas cron relevantes? Pode haver um erro de sintaxe. Além disso, cron(não tenho certeza anacron) usa run-partspara executar os scripts /etc/cron.weeklye run-partspossui alguns requisitos muito rigorosos para a nomeação de scripts. Dê uma olhada nos man run-partsdetalhes (embora pareça que esse script deve funcionar bem). Teste também se ele é executado corretamente a partir do crontab ( crontab -e) do seu próprio usuário .
terdon

1
Oi Terdon - obrigado pela resposta. Adicionei as informações solicitadas à pergunta original. Espero que tenha sido a coisa certa a fazer. Eu sou novo aqui.
Dominic

Isso é exatamente a coisa certa a fazer, obrigado :). Sempre que as pessoas solicitarem informações nos comentários, adicione-as ao corpo da pergunta e responda (você pode executar ping nos usuários com um @, por exemplo, para executar ping apenas para incluir-me @terdonno seu comentário) ao usuário que a solicitou. Precisamente como você fez. Eu esperava que houvesse um erro de sintaxe, mas tudo parece bem. Eu não tenho nenhuma experiência com anacron embora. Por que você não adiciona o comando que deseja executar ao crontab do usuário? * * * * * /path/to/fstrim. Isso o iniciará a cada minuto e você pode pelo menos verificar se está funcionando.
terdon

Por que você está adicionando outro script para aparar? É executado automaticamente pelo ubuntu sem a necessidade de você mexer com ele.
Braiam

Oi @Braiam. Eu não adicionei outro script. Acabei de adicionar um comando echo ao script existente que acompanha o Xubuntu. Terdon sugeriu que eu tentasse crontab -e, mas isso também não funcionou.
Dominic

Respostas:


1

Eu tenho o anacron trabalhando no meu sistema, da seguinte maneira:

Em /etc/fstabeu tenho alguns diretórios movidos tmpfspara evitar gravações no SSD, como este:

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

Isso significa que /var/spool/anacron/não existe no momento da inicialização e, como resultado, anacronnão funciona. Os três arquivos neste diretório devem ser preservados nas inicializações do sistema para que o anacron funcione. Então, criei um diretório /usr/local/etc/anacron/e, no momento da inicialização, crio /var/spool/e coloquei um link simbólico que aponta para esse diretório. Agora anacronestá funcionando porque seus três arquivos ( cron.daily, cron.weeklye cron.monthly) são preservados através de botas.

Na verdade, eu crio um monte de diretórios na inicialização, como descrito aqui: Como corrigir o anacron & cups-pdf quando você tem / var no tempfs, mas modifiquei o script para que não crie, /var/spool/anacronmas crie o link simbólico mencionado acima .

O script resultante é assim:

#!/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

O script acima está no meu diretório pessoal e é executado no momento da inicialização por um comando, /etc/rc.localconforme descrito no artigo vinculado.

Talvez a verdadeira solução para este problema seria para anacronarmazenar cron.daily, cron.weeklye cron.monthlyem um diretório que o usuário não é susceptível de se deslocar para tmpfs.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.