anacron不工作

anacron不工作

我全新安装了 Xubuntu 14.04 32 位,但anacron似乎无法运行。

我读到最好使用 cron 作业来修剪 SSD,并且 Ubuntu 有一个 cron 作业可以执行此操作,因此我从中删除了 discard /etc/fstab。我想确认 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,它确实每小时运行一次。文件中出现回显文本,驱动器指示灯亮起约两分钟。但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 )

我认为它一定具有正确的 run-parts 语法,因为当我将脚本移入时它确实运行cron.hourly

看起来好像cron可以工作,但anacron实际上不行。所以我的问题是,我该怎么做才能让它anacron工作?

答案1

我让 anacron 在我的系统上运行,如下所示:

/etc/fstab已将一些目录移动到tmpfs以避免写入 SSD,如下所示:

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 正常工作。因此,我创建了一个目录/usr/local/etc/anacron/,并在启动时创建/var/spool/并放置了一个指向该目录的符号链接。现在可以正常anacron工作,因为它的三个文件(cron.dailycron.weeklycron.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

相关内容