Como corrigir anacron & cups-pdf quando você tem / var em tempfs

0

Eu tenho uma unidade ssd no meu laptop e segui vários conselhos que diziam para colocar / var / log / var / spool & amp; / var / cache em um tmpfs para que as leituras / gravações constantes não diminuam a vida do meu ssd.

No entanto, o anacron agora não inicia e a mensagem de erro em / var / log / syslog diz

anacron[4169]: Can't chdir to /var/spool/anacron: No such file or directory
kernel: [ 3037.851604] init: anacron main process (4169) terminated with status 1

cups-pdf tem um problema parecido e reclama que / var / spool / cups-pdf não existe.

Eu verifiquei e / var / spool / e é verdade que nenhum deles existe.

Se eu criar esses diretórios manualmente, ambos os processos serão executados. Mas depois que eu reiniciar os diretórios sumiram novamente.

Como faço para que eles existam permanentemente?

    
por Jesse the Wind Wanderer 08.05.2013 / 07:33

2 respostas

1

Ok, então nada que você fizer em um tmpfs não persistirá após a reinicialização. Isso porque um tmpfs é temporário e só existe na RAM. Tudo o que precisa estar em um tmpfs para o sistema ser executado deve ser criado toda vez que o sistema for inicializado. A maioria dos processos que usam / var fazem isso, mas alguns como o anacron e o cups-pdf não.

Para corrigir isso, você precisa criar um script que crie esses diretórios sempre que o sistema for iniciado. Copie o texto abaixo em um arquivo de texto, salve-o e torne-o executável.

#!/bin/bash

# Script to create required directories in tempfs /var (that are not otherwise created)
# 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 installer news ntpstats samba speech-dispatcher unattended-upgrades; do
  if [ ! -d /var/log/$dir ] ; then
    mkdir /var/log/$dir
  fi
done

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

Em seguida, você precisa fazer este script ser executado toda vez que o sistema iniciar, adicionando uma linha ao /etc/rc.local

Eu chamei meu script de "make_required_dirs_on_tempfs.sh", então adicionei a seguinte linha ao arquivo rc.local. Coloque no final, mas acima do comando "exit 0".

/PATH_TO_SCRIPT/make_required_dirs_on_tempfs.sh

Eu salvei meu script em "/ mnt / data / config / scripts / start-stop" e assim meu arquivo /etc/rc.local tem esta aparência:

#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.

#if [ -d "/var/cache/apt/archives" ]; then echo "/var/cache/apt/archives exists"; else mkdir /var/cache/apt/archives; fi || die "Command failed: mkdir /var/cache/apt/archives"

/mnt/data/config/scripts/start-stop/make_required_dirs_on_tempfs.sh

exit 0
    
por Jesse the Wind Wanderer 08.05.2013 / 07:33
1

fwiw, comecei com o script "Jesse the Wind Wanderer" e adicionei alguns diretórios e ajustes adicionais. Eu desabilitei temporariamente o tmpfs para / tmp, / var / log e / var / spool, depois reiniciei para ver quais arquivos de log e diretórios de spool estavam presentes em um cenário não-tmpfs.

Ao fazer isso, consegui detectar alguns diretórios e arquivos adicionais que provavelmente precisavam ser criados / presentes para que algumas das tarefas de inicialização / cron funcionassem corretamente.

Em termos das configurações de propriedade no script, usei as mesmas configurações de propriedade que apareceram no cenário não-tmpfs.

#!/bin/bash

# Script to create required directories in tempfs /var (that are not otherwise created)
# 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

touch /var/log/apport.log
chown root:adm /var/log/$i

for i in auth.log kern.log syslog
do
  touch /var/log/$i
  chown syslog:adm /var/log/$i
done


for dir in anacron cron cups cups-pdf libreoffice lintian plymouth rsyslog; do
  if [ ! -d /var/spool/$dir ] ; then
    mkdir /var/spool/$dir
  fi
done

cd /var/spool
rm -f mail
ln -s /var/mail


# needed in order for rsyslog to pick up the newly created log files:
sudo service rsyslog restart

/usr/bin/logger "(finished making required directories for tmpfs)"

E, claro, torne o script executável pelo root e chame-o de rc.local de acordo com as instruções do Jesse.

    
por Gino 23.10.2014 / 04:32