Menu

[r2016]: / trunk / etc / rc.d / cron  Maximize  Restore  History

Download this file

194 lines (180 with data), 6.8 kB

#!/bin/sh
#
# $NetBSD: cron,v 1.5 2000/09/19 13:04:38 lukem Exp $
# $FreeBSD: src/etc/rc.d/cron,v 1.7 2005/01/16 03:12:03 obrien Exp $
#
# Modified by Volker Theile (votdev@gmx.de)
#

# PROVIDE: cron
# REQUIRE: LOGIN cleanvar
# BEFORE: securelevel
# KEYWORD: shutdown

. /etc/rc.subr
. /etc/configxml.subr

name="cron"
rcvar="`set_rcvar`"
command="/usr/sbin/${name}"
pidfile="/var/run/${name}.pid"
start_precmd="create_conf"
cron_config=${cron_config:-"/etc/crontab"}

create_conf()
{
	# Create /etc/crontab.
	echo "SHELL=/bin/sh
PATH=/etc:/bin:/sbin:/usr/bin:/usr/sbin
HOME=/var/log
#
#minute	hour	mday	month	wday	who	command
#" > ${cron_config}

	# RSYNC client
	_index=`configxml_get_count "//rsync/rsyncclient"`
	if [ 0 -lt ${_index} ]; then
		echo "# Perform RSYNC client." >> ${cron_config}
	fi
	_i=0
	while [ ${_index} -gt 0 ]
	do
		/usr/local/bin/xml sel -t -m "//rsync/rsyncclient[position()=${_index}]" \
			-i "all_mins[. = "0"]" -m minute -i "position() > 1" -o "," -b -v "." -b -b \
			-i "all_mins[. != "0"]" -o "*" -b \
			-o " " \
			-i "all_hours[. = "0"]" -m hour -i "position() > 1" -o "," -b -v "." -b -b \
			-i "all_hours[. != "0"]" -o "*" -b \
			-o " " \
			-i "all_days[. = "0"]" -m day -i "position() > 1" -o "," -b -v "." -b -b \
			-i "all_days[. != "0"]" -o "*" -b \
			-o " " \
			-i "all_months[. = "0"]" -m month -i "position() > 1" -o "," -b -v "." -b -b \
			-i "all_months[. != "0"]" -o "*" -b \
			-o " " \
			-i "all_weekdays[. = "0"]" -m weekday -i "position() > 1" -o "," -b -v "." -b -b \
			-i "all_weekdays[. != "0"]" -o "*" -b \
			-o " " \
			-o "root /var/run/rsync_client${_i}.sh" \
			${configxml_file} | /usr/local/bin/xml unesc >> ${cron_config}

		_i=$(( ${_i} + 1 ))
		_index=$(( ${_index} - 1 ))
	done

	# RSYNC local
	_index=`configxml_get_count "//rsync/rsynclocal"`
	if [ 0 -lt ${_index} ]; then
		echo "# Perform RSYNC local." >> ${cron_config}
	fi
	_i=0
	while [ ${_index} -gt 0 ]
	do
		/usr/local/bin/xml sel -t -m "//rsync/rsynclocal[position()=${_index}]" \
			-i "all_mins[. = "0"]" -m minute -i "position() > 1" -o "," -b -v "." -b -b \
			-i "all_mins[. != "0"]" -o "*" -b \
			-o " " \
			-i "all_hours[. = "0"]" -m hour -i "position() > 1" -o "," -b -v "." -b -b \
			-i "all_hours[. != "0"]" -o "*" -b \
			-o " " \
			-i "all_days[. = "0"]" -m day -i "position() > 1" -o "," -b -v "." -b -b \
			-i "all_days[. != "0"]" -o "*" -b \
			-o " " \
			-i "all_months[. = "0"]" -m month -i "position() > 1" -o "," -b -v "." -b -b \
			-i "all_months[. != "0"]" -o "*" -b \
			-o " " \
			-i "all_weekdays[. = "0"]" -m weekday -i "position() > 1" -o "," -b -v "." -b -b \
			-i "all_weekdays[. != "0"]" -o "*" -b \
			-o " " \
			-o "root /var/run/rsync_local${_i}.sh" \
			${configxml_file} | /usr/local/bin/xml unesc >> ${cron_config}

		_i=$(( ${_i} + 1 ))
		_index=$(( ${_index} - 1 ))
	done

	# Scheduled shutdown
	if [ 0 -lt `configxml_get_count "//shutdown/enable"` ]; then
		echo "# Perform scheduled shutdown." >> ${cron_config}
		/usr/local/bin/xml sel -t -m "//shutdown" \
			-i "all_mins[. = "0"]" -m minute -i "position() > 1" -o "," -b -v "." -b -b \
			-i "all_mins[. != "0"]" -o "*" -b \
			-o " " \
			-i "all_hours[. = "0"]" -m hour -i "position() > 1" -o "," -b -v "." -b -b \
			-i "all_hours[. != "0"]" -o "*" -b \
			-o " " \
			-i "all_days[. = "0"]" -m day -i "position() > 1" -o "," -b -v "." -b -b \
			-i "all_days[. != "0"]" -o "*" -b \
			-o " " \
			-i "all_months[. = "0"]" -m month -i "position() > 1" -o "," -b -v "." -b -b \
			-i "all_months[. != "0"]" -o "*" -b \
			-o " " \
			-i "all_weekdays[. = "0"]" -m weekday -i "position() > 1" -o "," -b -v "." -b -b \
			-i "all_weekdays[. != "0"]" -o "*" -b \
			-o " " \
			-o "root /sbin/shutdown -p now" \
			${configxml_file} | /usr/local/bin/xml unesc >> ${cron_config}
	fi

	# Scheduled reboot
	if [ 0 -lt `configxml_get_count "//reboot/enable"` ]; then
		echo "# Perform scheduled reboot." >> ${cron_config}
		/usr/local/bin/xml sel -t -m "//reboot" \
			-i "all_mins[. = "0"]" -m minute -i "position() > 1" -o "," -b -v "." -b -b \
			-i "all_mins[. != "0"]" -o "*" -b \
			-o " " \
			-i "all_hours[. = "0"]" -m hour -i "position() > 1" -o "," -b -v "." -b -b \
			-i "all_hours[. != "0"]" -o "*" -b \
			-o " " \
			-i "all_days[. = "0"]" -m day -i "position() > 1" -o "," -b -v "." -b -b \
			-i "all_days[. != "0"]" -o "*" -b \
			-o " " \
			-i "all_months[. = "0"]" -m month -i "position() > 1" -o "," -b -v "." -b -b \
			-i "all_months[. != "0"]" -o "*" -b \
			-o " " \
			-i "all_weekdays[. = "0"]" -m weekday -i "position() > 1" -o "," -b -v "." -b -b \
			-i "all_weekdays[. != "0"]" -o "*" -b \
			-o " " \
			-o "root /sbin/shutdown -r now" \
			${configxml_file} | /usr/local/bin/xml unesc >> ${cron_config}
	fi

	# Email status notification
	if [ 0 -lt `configxml_get_count "//statusreport/enable"` ]; then
		echo "# Perform email status report." >> ${cron_config}
		/usr/local/bin/xml sel -t -m "//statusreport" \
			-i "all_mins[. = "0"]" -m minute -i "position() > 1" -o "," -b -v "." -b -b \
			-i "all_mins[. != "0"]" -o "*" -b \
			-o " " \
			-i "all_hours[. = "0"]" -m hour -i "position() > 1" -o "," -b -v "." -b -b \
			-i "all_hours[. != "0"]" -o "*" -b \
			-o " " \
			-i "all_days[. = "0"]" -m day -i "position() > 1" -o "," -b -v "." -b -b \
			-i "all_days[. != "0"]" -o "*" -b \
			-o " " \
			-i "all_months[. = "0"]" -m month -i "position() > 1" -o "," -b -v "." -b -b \
			-i "all_months[. != "0"]" -o "*" -b \
			-o " " \
			-i "all_weekdays[. = "0"]" -m weekday -i "position() > 1" -o "," -b -v "." -b -b \
			-i "all_weekdays[. != "0"]" -o "*" -b \
			-o " " \
			-o "root /etc/mail/sendreport" \
			${configxml_file} | /usr/local/bin/xml unesc >> ${cron_config}
	fi

	# Additional cron jobs
	if [ 0 -lt `configxml_get_count "//cron/job[enable]"` ]; then
		echo "# Additional cron jobs." >> ${cron_config}
		/usr/local/bin/xml sel -t -m "//cron/job[enable]" \
			-i "all_mins[. = "0"]" -m minute -i "position() > 1" -o "," -b -v "." -b -b \
			-i "all_mins[. != "0"]" -o "*" -b \
			-o " " \
			-i "all_hours[. = "0"]" -m hour -i "position() > 1" -o "," -b -v "." -b -b \
			-i "all_hours[. != "0"]" -o "*" -b \
			-o " " \
			-i "all_days[. = "0"]" -m day -i "position() > 1" -o "," -b -v "." -b -b \
			-i "all_days[. != "0"]" -o "*" -b \
			-o " " \
			-i "all_months[. = "0"]" -m month -i "position() > 1" -o "," -b -v "." -b -b \
			-i "all_months[. != "0"]" -o "*" -b \
			-o " " \
			-i "all_weekdays[. = "0"]" -m weekday -i "position() > 1" -o "," -b -v "." -b -b \
			-i "all_weekdays[. != "0"]" -o "*" -b \
			-v "concat(' ',who,' ',command)" -n \
			${configxml_file} | /usr/local/bin/xml unesc >> ${cron_config}
	fi
}

load_rc_config $name
if checkyesno cron_dst
then
	cron_flags="$cron_flags -s"
fi
run_rc_command "$1"
Want the latest updates on software, tech news, and AI?
Get latest updates about software, tech news, and AI from SourceForge directly in your inbox once a month.