Using anacrontab in ubuntu (backintime as example)

Anacron is similar to cron, a tool to schelude programs on linux systems. The only difference is that anacron does not assume that computer is online all the time. Anacron executes missed commands on boot. Anacron requires root access, unlike cron which can schelude tasks for non root users too. Anacron cannot schelude recurring tasks with a period less than a day. For example, anacron cannot be used to schelude a recurring task with a period of an hour (hourly task).

Anacrontab has anacrontab, similar to crontab, located in /etc/anacrontab. My ubuntu installation has the following contents as default

# /etc/anacrontab: configuration file for anacron

# See anacron(8) and anacrontab(5) for details.

SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

# These replace cron's entries
1    5    cron.daily     nice run-parts --report /etc/cron.daily
7    10    cron.weekly     nice run-parts --report /etc/cron.weekly
@monthly    15    cron.monthly nice run-parts --report /etc/cron.monthly

First column means period, 1 equals daily, 7 equals weekly and @monthly equals monthly. Second column means delay which is the delay (in minutes) the commands will be executed after system start. For example daily commands will be executed 5 minutes after start each day.

We can see that anacron is configured to launch scripts in /etc/cron.daily, /etc/cron.weekly and /etc/cron.monthly folders. Simple enough.

If we want to add a daily script, we just make a new script in /etc/cron.weekly folder (you can use other scripts as examples) and give it execution permissions by

sudo chmod +x /etc/cron.xxxx/scriptName  (xxxx replaced by daily, weekly or monthly)

One important thing to remember is that script name cannot contain periods! This is a known anacron bug.

For excellent backup program, Back In Time, following script (/etc/cron.daily/back-in-time) will schelude the daily back up daily:

#!/bin/sh
nice -n 19 /usr/bin/backintime --backup-job >/dev/null 2>&1

Anacron is a perfect scheluding tool for desktop ubuntu systems.

EDIT:

I was wondering one day why anacrob ’replaces’ crontab when it comes to daily, weekly or monthly jobs. Ubuntu default system-wide crontab looks something like this:

# /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 11    * * *    root    test -x /usr/sbin/anacron || ( cd / && run-parts –report /etc/cron.daily )
47 11    * * 7    root    test -x /usr/sbin/anacron || ( cd / && run-parts –report /etc/cron.weekly )
52 11    1 * *    root    test -x /usr/sbin/anacron || ( cd / && run-parts –report /etc/cron.monthly )
#

Crontab cleverly uses test -x to find if /usr/sbin/anacron exists and has executable bit set. If true, nothing is done. If anacron is not installed, all scripts in /etc/cron.xxxx are executed. This is why (system-wide) crontab does not nothing when anacrontab is installed.

Mainokset

Beagle no space left on device error on ubuntu

If you get ’no space left on device’ when opening beagle settings, the reason might not be disk space. Beagle uses inotify service if it’s available. Inotify notifies beagle on file system changes. The problem is too low number of inotify watches.

The fix for the problem is quite simple and documented. We need to increase inotify watches by executing following command as root:

echo 16384 > /proc/sys/fs/inotify/max_user_watches

Source: http://beagle-project.org/Troubleshooting  (Beagle loops on directories)

Above command increases the limit to 16384 which is usually enough. Unfortunately max_user_watches limit is reseted on computer restart. The solution is to make a start up script which executes above command automatically.

Start up script can be created by

sudo gedit /etc/init.d/beagleFix

and entering following to the text file

#!/bin/sh
echo 16384 > /proc/sys/fs/inotify/max_user_watches

After this, we have to make the script executable:

sudo chmod +x /etc/init.d/beagleFix

To make the script start every time we must run the following command as root

update-rc.d beagleFix defaults