web-dev-qa-db-ja.com

アナクロンが機能しない

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.hourlyanacronを使用しません。

これが私の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を機能させるにはどうすればよいですか?

4
Dominic

次のように、システムで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.dailycron.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のコマンドによってブート時に実行されます。

この問題の本当の解決策は、anacroncron.dailycron.weekly、およびcron.monthlyをユーザーがtmpfsに移動する可能性が低いディレクトリに格納することです。

1
Dominic