Как исправить анакрон & amp; cups-pdf, когда у вас есть / var на tmpfs

У меня есть ssd-диск в моем ноутбуке, и я следовал различным советам, в которых говорилось поставить / var / log / var / spool & amp; / var / cache для tmpfs, чтобы постоянное чтение / запись не уменьшило жизнь моего ssd.

Тем не менее, anacron теперь не запускается, и в сообщении об ошибке в / var / log / syslog говорится

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 есть похожая проблема, и он жалуется, что / var / spool / cups-pdf не существует.

Я проверил и / var / spool /, и это правда, что ни один из них не существует.

Если я создаю эти каталоги вручную, запускаются оба процесса. Но после перезапуска каталоги снова исчезли.

Как заставить их существовать постоянно?

0
задан 8 May 2013 в 09:33

2 ответа

Между прочим, я начал со сценария "Jesse the Wind Wanderer", а затем добавил несколько дополнительных каталогов и настроек. Я временно отключил tmpfs для / tmp, / var / log и / var / spool, а затем перезагрузил компьютер, чтобы посмотреть, какие файлы журналов и каталоги спула присутствовали в сценарии, отличном от tmpfs.

Таким образом, я смог обнаружить некоторые дополнительные каталоги и файлы, которые, вероятно, нужно было создать / представить для корректной работы некоторых заданий запуска / cron.

Что касается настроек владения в скрипте, я просто использовал те же настройки владения, которые появились в сценарии не-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)"

И, конечно, сделайте скрипт исполняемым пользователем root и вызовите его из rc.local в соответствии с инструкциями Джесси.

0
ответ дан 8 May 2013 в 09:33

Хорошо, поэтому ничего, что вы делаете на tmpfs, не будет сохраняться после перезапуска. Это потому, что tmpfs является временным и существует только в оперативной памяти. Все, что должно быть в tmpfs для запуска системы, должно создаваться при каждой загрузке системы. Большинство процессов, использующих / var, делают это, но некоторые, такие как anacron и cups-pdf, этого не делают.

Чтобы это исправить, вы должны создать скрипт, который создает эти каталоги каждый раз при запуске системы. Скопируйте нижеприведенное в текстовый файл, сохраните его и сделайте его исполняемым.

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

Затем вам нужно запускать этот скрипт каждый раз, когда система запускается, добавив строку в /etc/rc.local

Я назвал свой скрипт «make_required_dirs_on_tempfs.sh», поэтому я просто добавляю Следующая строка в файл rc.local. Поместите его в конец, но над командой «0».

/PATH_TO_SCRIPT/make_required_dirs_on_tempfs.sh

Я сохранил свой скрипт в "/ mnt / data / config / scripts / start-stop", и поэтому мой файл /etc/rc.local выглядит так:

#!/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
0
ответ дан 8 May 2013 в 09:33

Другие вопросы по тегам:

Похожие вопросы: