Показаны сообщения с ярлыком script. Показать все сообщения
Показаны сообщения с ярлыком script. Показать все сообщения

четверг, 31 мая 2012 г.

Автоматическое выполнение prelink по расписанию

Как ни странно, начитавшись статей типа Ускорение openSUSE: prelink и Сокращение времени загрузки Fedora 17 c 15 до 3 секунд можно обнаружить, что запускать prelink постоянно вручную довольно "не кошерно". Этак надо у себя прививать новую привычку (можно, например, даже напоминание на мобильнике устанавливать).
Мейнтейнеры некоторых дистрибутивов это осознали и начали добавлять в пакеты специальный скрипт для планировщика задач cron и для значительного упрощения своей участи пользователи prelink могут этот скрипт коварно позаимствовать. С поисками далеко идти не нужно - достаточно взять файл prelink.cron из prelink-0.4.5-4.fc17.src.rpm и немного исправить.

Пошагово:

Для ежедневного выполнения prelink, данный файл нужно скопировать в /etc/cron.daily/ и дать права на выполнение:

chmod +x /etc/cron.daily/prelink.cron

Отредактировать скрипт, чтобы он использовал переменные из файла /etc/sysconfig/prelink специфичные для openSUSE. Содержимое его при этом становится таким:

#!/bin/sh

. /etc/sysconfig/prelink

renice +19 -p $$ >/dev/null 2>&1

if [ "$USE_PRELINK" != yes ]; then
  if [ -f /etc/prelink.cache ]; then
    /usr/sbin/prelink -ua 2>&1
    rm -f /etc/prelink.cache
    # Restart init if needed
    [ -n "$(find `ldd /sbin/init | awk 'NF == 4 { print $3 }'` /sbin/init -ctime -1 2>/dev/null )" ] && /sbin/telinit u
  fi
  exit 0
fi

if [ ! -f /etc/prelink.cache -o -f /var/lib/prelink/force ] \
   || grep -q '^prelink-ELF0.[0-2]' /etc/prelink.cache; then
  # If cache does not exist or is from older prelink versions or
  # if we were asked to explicitely, force full prelinking
  rm -f /etc/prelink.cache /var/lib/prelink/force
  PRELINK_OPTS="$PRELINK_OPTS -f"

/usr/sbin/prelink -a 2>&1
# Restart init if needed
[ -n "$(find `ldd /sbin/init | awk 'NF == 4 { print $3 }'` /sbin/init -ctime -1 2>/dev/null )" ] && /sbin/telinit u
fi
exit 0

Убедитесь, что cron запущен, чтобы не было недоразумений:

systemctl status cron.service

Согласно данным из /etc/sysconfig/cron, prelink.cron будет выполняться через 15 минут после загрузки системы, а в следующий раз через 24 часа и так далее.

Дополнительно к этому можно выставить параметру USE_PRELINK в файле /etc/sysconfig/prelink значение "yes", чтобы prelink автоматически запускался после каждого выполнения SuSEconfig, который выполняется, например, после обновления многих системных пакетов, да и вообще после операций с пакетами в YaST2. Сделать это можно как с помощью любимого текстового редактора, так и модуля YaST2  "редактор /etc/sysconfig".