Xubuntu 14.04 32ビットのクリーンインストールがあり、anacron
が機能していないようです。
SSDをトリムするにはcronジョブを使用する方が良いことを読み、Ubuntuにはそれを行うためのcronジョブがあるため、/etc/fstab
からdiscardを削除しました。 cronジョブが機能していることを確認したかったので、echo
コマンドを/etc/cron.weekly/fstrim
に追加して、次のようにしました。
#!/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
端末からは正常に実行されますが、毎週のジョブとして実行されることはありません。それで私はそれをcron.daily
に移動しましたが、そこから実行されることもありません。そこで、それをcron.hourly
に移動しましたが、1時間ごとに実行されます。エコーテキストがファイルに表示され、ドライブライトが約2分間点灯します。ただし、cron.hourly
はanacron
を使用しません。
これが私のcrontab
ファイルです。私はいくつかの時間を変更しましたが、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 )
#
以下をcrontab -eに追加して、ユーザーのcrontabから正しく実行されるかどうかをテストしました。それから、午後8時10分まで数分待ちましたが、何も起こりませんでした。
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 )
スクリプトをcron.hourly
に移動すると実行されるため、実行部分の正しい構文が必要だと思います。
cron
は機能しているが、anacron
は機能していないようです。私の質問は、anacron
を機能させるにはどうすればよいですか?
次のように、システムでanacronを動作させました。
/etc/fstab
では、SSDへの書き込みを避けるために、次のようにいくつかのディレクトリをtmpfs
に移動しています。
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
これは、/var/spool/anacron/
がブート時に存在せず、その結果、anacron
が機能しないことを意味します。 anacronが機能するためには、このディレクトリ内の3つのファイルをシステムブート間で保持する必要があります。そこで、/usr/local/etc/anacron/
というディレクトリを作成し、ブート時に/var/spool/
を作成し、そのディレクトリを指すシンボリックリンクをその中に置きます。現在、anacron
は機能しています。これは、3つのファイル(cron.daily
、cron.weekly
、およびcron.monthly
)がブート後も保持されるためです。
実際、ここで説明するように、ブート時に多数のディレクトリを作成します。 tempfsに/ varがある場合にanacronとcups-pdfを修正する方法 しかし、/var/spool/anacron
を作成しないようにスクリプトを変更しましたしかし、代わりに上記のシンボリックリンクを作成します。
結果のスクリプトは次のようになります。
#!/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
上記のスクリプトは私のホームディレクトリにあり、リンクされた記事で説明されているように、/etc/rc.local
のコマンドによってブート時に実行されます。
この問題の本当の解決策は、anacron
がcron.daily
、cron.weekly
、およびcron.monthly
をユーザーがtmpfs
に移動する可能性が低いディレクトリに格納することです。