我全新安装了 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.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
。