cron-config: Please test

Pierre A. Humblet Pierre.Humblet@ieee.org
Wed Dec 29 01:13:00 GMT 2004


The goal of the attached cron-config script is to setup
a cron service on any Windows platform, from Win95 to Win2003,
and to verify that the environment is sane.
The hope is to reduce the rate of complaints to the list.
The plan is to make it part of the Cygwin cron package.
It includes most of the functionality of cron_diagnose.sh, 
provided by Mark Harig.
I would appreciate getting feedback about any glitches,
particularly from Windows 2003 users. To test the
script, please use the most recent version of the cron
package. Feel free to send your comments directly to me.
Pierre
-------------- next part --------------
#!/bin/sh
#set -x
# ======================================================================
# This script initializes and possibly starts a cron daemon.
# It includes numerous tests to insure that the environmnet is sound.
# On Windows 2003 it is capable of creating a privileged user.
# ======================================================================
# ======================================================================
# Routine: getvalue
# Get a verified non-empty string in variable "value"
# ======================================================================
getvalue() {
 while true
 do
 echo -n "1ドル "
 if read value; then
 if [ -n "${value}" ]; then
	 echo -n "Reenter: "
	 read verify
	 [ "${verify}" = "${value}" ] && return 0;
 fi
 else
 echo -e "Quitting.\n"
 exit 1
 fi
 done
} # === End of getvalue() === #
# ======================================================================
# Routine: request
# Get a yes/no anwer
# ======================================================================
request() {
 while true
 do
 echo -n "1ドル (yes/no) "
 if read answer
 then
 if [ "${answer}" = "yes" ]
 then
	return 0
 elif [ "${answer}" = "no" ]
 then
 return 1
 fi
 else
 echo -e "Quitting.\n"
 exit 1
 fi
 done
} # === End of request() === #
# ======================================================================
# Routine: check_program
# Check to see that a specified program (1ドル) is installed and accessible
# by this script. If it is not, then alert the user about which package
# (2ドル) should be installed to provide that program.
# ======================================================================
check_program() {
 unset -f "1ドル"
 prog="1ドル"
 if [ ! -e "/usr/bin/${prog}" ]; then
	echo "The '1ドル' program is not in /usr/bin."
	echo "This program is included in the \'2ドル\' package."
	echo "Please install this program."
	echo
 return 1
 elif [ ! -x "/usr/bin/${prog}" ]; then
	echo "The '1ドル' program (/usr/bin/${prog}') is not executable."
	echo
	return 1
 fi
} # === End of check_program() === #
# ======================================================================
# Routine: sanity_check
# Check for the set of programs that are used by this script.
# ======================================================================
sanity_check() {
 ret=0
 # Check for programs that this script uses.
 check_program awk gawk || ret=1
 check_program ls coreutils || ret=1
 check_program grep grep || ret=1
 check_program sed sed || ret=1
 check_program id coreutils || ret=1
 check_program cut coreutils || ret=1
 check_program uname coreutils || ret=1
 check_program cygcheck cygwin || ret=1
 check_program regtool cygwin || ret=1
 return "${ret}"
} # === End of sanity_check() === #
# ======================================================================
# Routine: get_NT
# ======================================================================
get_NT() {
 nt2003=""
 nt=$(uname -s | sed -ne 's/^CYGWIN_NT-\([^ ]*\)/1円/p')
 [ "$nt" \> 5.1 ] && nt2003=yes
 [ -z "$nt" ] && return 1
 return 0
} # === End of get_NT() === #
# ======================================================================
# Routine: warning_for_etc_file
# Display a warning message for the user about overwriting the specified
# file in /etc.
# ======================================================================
warning_for_etc_file() {
	echo
	echo "WARNING: The command above overwrites any existing /etc/1ドル."
	echo "You may want to preserve /etc/1ドル before generating a new,"
	echo "one, and then compare your saved /etc/1ドル file with the"
	echo "newly-generated one in case you need to restore other"
	echo "entries."
	echo
} # === warning_for_etc_file() === #
# ======================================================================
# Routine: get_system_and_admins_gids
# Get the ADMINs ids from /etc/group and /etc/passwd
# ======================================================================
get_system_and_admins_ids() {
 ret=0
 for fname in /etc/passwd /etc/group; do
	if ls -ld "${fname}" | grep -Eq '^-r..r..r..'; then
	 true
	else
	 echo "The file $fname is not readable by all."
	 echo "Please run 'chmod +r $fname'."
	 echo
	 ret=1
	fi
 done
 [ ! -r /etc/passwd -o ! -r /etc/group ] && return 1;
 ADMINSGID=$(sed -ne '/^[^:]*:S-1-5-32-544:.*:/{s/[^:]*:[^:]*:\([0-9]*\):.*$/1円/p;q}' /etc/group)
 SYSTEMGID=$(sed -ne '/^[^:]*:S-1-5-18:.*:/{s/[^:]*:[^:]*:\([0-9]*\):.*$/1円/p;q}' /etc/group)
 if [ -z "$ADMINSGID" -o -z "$SYSTEMGID" ]; then
		echo "It appears that you do not have entries for the"
		echo "ADMINISTRATORS and/or SYSTEM sids in /etc/group."
		echo
		echo "Use the 'mkgroup' utility to generate them"
		echo " mkgroup -l > /etc/group"
		warning_for_etc_file group
		ret=1;
 fi
 ADMINSUID=$(sed -ne '/^[^:]*:[^:]*:[0-9]*:[0-9]*:[^:]*,S-1-5-32-544:.*:/{s/[^:]*:[^:]*:\([0-9]*\):.*$/1円/p;q}' /etc/passwd)
 SYSTEMUID=$(sed -ne '/^[^:]*:[^:]*:[0-9]*:[0-9]*:[^:]*,S-1-5-18:.*:/{s/[^:]*:[^:]*:\([0-9]*\):.*$/1円/p;q}' /etc/passwd)
 if [ -z "$ADMINSUID" -o -z "$SYSTEMUID" ]; then
		echo "It appears that you do not have an entry for the"
		echo "ADMINISTRATORS and/or SYSTEM sids in /etc/passwd."
		echo
		echo "Use the 'mkpasswd' utility to generate it"
		echo " mkpasswd -l > /etc/passwd."
		warning_for_etc_file passwd
		ret=1;
 fi
 return "${ret}"
} # === get_system_and_admins_ids() === #
# ======================================================================
# Routine: check_passwd_and_group
# Check to see whether the user's password ID and group exist in the
# system /etc/passwd and /etc/group files, respectively.
# ======================================================================
check_passwd_and_group() {
 ret=0
 if [ "$(id -gn)" = mkpasswd ]; then
	echo "It appears that you do not have an entry for your user ID"
	echo "in /etc/passwd. If this check is incorrect, then re-run"
	echo "this script with the '-f' command-line option."
	echo
	echo "Otherwise, use the 'mkpasswd' utility to generate an"
	echo "entry for your User ID in the password file:"
	echo " mkpasswd -l -u User_ID >> /etc/passwd"
	echo "or"
	echo " mkpasswd -d -u User_ID >> /etc/passwd."
	echo
	ret=1
 elif [ -n "$USERDOMAIN" ] && [ -n "$USERNAME" ]; then
	if ! grep -E -q -i "^$(id -un):.*U-$USERDOMAIN\\\\$USERNAME" /etc/passwd; then
	 echo "It appears that you do not have an entry for:"
	 echo " $USERDOMAIN\\$USERNAME"
	 echo "in /etc/passwd."
	 echo
	 echo "Use the 'mkpasswd' utility to generate an entry for"
	 echo "your User ID in the password file:"
	 echo " mkpasswd -d -u User_ID >> /etc/passwd."
	 echo
	 ret=1
	fi
 fi
 if [ "$(id -gn)" = mkgroup ]; then
	echo "It appears that you do not have an entry for your group ID"
	echo "in /etc/group. If this check is incorrect, then re-run"
	echo "this script with the '-f' command-line option."
	echo
	echo "Otherwise, use the 'mkgroup' utility to generate an"
	echo "entry for your group ID in the password file:"
	echo " mkgroup -l -g Group_id >> /etc/group"
	echo "or"
	echo " mkgroup -d -g Group_id >> /etc/group."
	echo
	ret=1
 fi
 return "${ret}"
} # === End of check_passwd_and_group() === #
# ======================================================================
# Routine: check_dir
# Check to see that the specified directory (1ドル) exists.
# ======================================================================
check_dir() {
	if [ ! -d 1ドル ]; then
		echo "Your computer does not appear to have a 1ドル directory."
		echo "Please investigate this problem, and then run this script again."
		echo
		return 1
	fi
	if ls -ld 1ドル | grep -E -q '^dr[-w]x.*'; then
	 true
	else
	 echo "The permissions on the directory 1ドル are not correct."
	 echo "Please run 'chmod u+rx 1ドル'."
	 echo
	 return 1
	fi
} # === End of check_dir() === #
# ======================================================================
# Routine: check_dir_perms
# Check to see that the specified directory (1ドル) exists and has the
# required permissions, as described in /usr/share/doc/Cygwin/cron.README.
# ======================================================================
check_dir_perms() {
 check_dir 1ドル || return 1
 if ls -ld 1ドル | grep -F -q 'drwxrwxrwt'; then
	true
 else
	echo "The permissions on the directory 1ドル are not correct."
	echo "Please run 'chmod 1777 1ドル'."
	echo
	return 1
 fi
} # === End of check_dir_perms() === #
# ======================================================================
# Routine: check_access
# Check to see that the owner and Administrators have
# proper access to the file or directory.
# On installations older than Windows 2003, allow access by System
# ======================================================================
check_access() {
 file="1ドル"
 perm="2ドル"
 notify=0;
 ls="$(ls -dLln "$file" 2> /dev/null)"
 # If the owner of the file does not have access,
 # then notify the user.
 if [ -z "$(echo "$ls" | sed -n /^."$perm"/p)" ]; then
	notify=1;
 # If 'Administrators' has owner or group access to the file,
 # but does not have the desired access, then notify the user.
 elif [ "$(echo "$ls" | awk '{ print 3ドル }')" -eq $ADMINSUID \
	-o \( -z "$nt2003" -a "$(echo "$ls" | awk '{ print 3ドル }')" -eq $SYSTEMUID \) ]; then
	true;
 elif [ "$(echo "$ls" | awk '{ print 4ドル }')" -eq $ADMINSGID \
	-o \( -z "$nt2003" -a "$(echo "$ls" | awk '{ print 4ドル }')" -eq $SYSTEMGID \) ]; then
	if [ -z "$(echo "$ls" | sed -n /^...."$perm"/p)" ]; then notify=1; fi
 elif [ -z "$(echo "$ls" | sed -n /^......."$perm"/p)" ]; then notify=1; fi
 if [ "$notify" -eq 1 ]; then
	echo "The owner and the Administrators need";
	echo "to have $perm permission to $file.";
	echo "Here are the current permissions:";
	ls -dlL "${file}";
	echo;
	echo "Please change the user and/or group ownership and";
	echo "permissions of $file.";
	echo
	return 1;
 fi
} # === End of check_access() === #
# ======================================================================
# Routine: check_sys_mount
# Check to see that the SYSTEM account has access to the specified
# directory.
# ======================================================================
check_sys_mount() {
 mnt_point=1ドル
 dos_dir=2ドル
 SYSTEM_MOUNTS='/proc/registry/HKey_Local_Machine/Software/Cygnus Solutions/Cygwin/mounts v2'
 if ls "$SYSTEM_MOUNTS" | grep -Eq "^${mnt_point}\$"; then
	true
 else
	echo;
	echo "The SYSTEM user cannot access the mount point ${mnt_point}."
	echo "Please run the following command to add a system mount point:"
	echo ' mount -f -s -b "[DOS path to Cygwin]'$dos_dir\" \"$mnt_point\"
	echo "where [DOS path to Cygwin] is something like c:/cygwin."
	echo
	echo "For more information, run 'mount -m' and 'mount -h'"
	echo
	return 1
 fi
} # === End of check_sys_mount() === #
# ======================================================================
# Routine: check_cron_table
# Check for the existence of a crontab for the user, and check its
# permissions and ownership.
# ======================================================================
check_cron_table() {
 cron_table="/var/cron/tabs/${USER}"
 if [ ! -f $cron_table ]; then
	echo "WARNING: Your computer does not appear to have a cron table for ${USER}."
	echo "Please generate a cron table for ${USER} using 'crontab -e'"
	echo
	return 0
 fi
 fail=0
 ls="$(ls -ln "$cron_table")"
 if echo "$ls" | grep -Eq '^-rw-r-----'; then
	true
 else
	echo "The file permissions of your cron table need to"
	echo "provide read/write access for ${USER}."
	echo "The permissions of your cron table file are set to:"
	ls -l $cron_table
	echo
	echo "You can set the file permissions with:"
	echo "	chmod 640 $cron_table"
	echo "Please change your cron table's permissions."
	echo
	fail=1
 fi
 if [ "$(echo "$ls" | awk '{ print 4ドル }')" -ne "$ADMINSGID" \
	-a \( -n "$nt2003" -o "$(echo "$ls" | awk '{ print 4ドル }')" -ne "$SYSTEMGID" \) ]; then
	echo "The group membership of your cron table file should be ADMINISTRATORS,"
	echo "as documented in the file /usr/share/doc/Cygwin/cron.README."
	echo "Here is your cron table file:"
	ls -l $cron_table
	echo
	echo "You can change the group membership setting with:"
	echo "	 chgrp $ADMINSGID $cron_table"
	echo "Please change your cron table's group membership."
	echo
	fail=1
 fi
 return "${fail}"
} # === End of check_cron_table() === #
# ======================================================================
# Routine: check_myself
# Check for the existence and accessibility of key files
# ======================================================================
check_myself() {
 ret=0
 if [ ! -x /usr/sbin/cron ]; then
	echo "ERROR: You need x access to /usr/sbin/cron.";
	echo
	ret=1
 fi
 if [ ! -w /var/run ]; then
	echo "ERROR: You need w access to /var/run.";
	echo
	ret=1
 fi
 if [ ! -w /var/log ]; then
	echo "ERROR: You need w access to /var/log.";
	echo
	ret=1
 fi
 if [ ! -x /usr/sbin/sendmail ]; then
	echo "WARNING: /usr/sbin/sendmail should point to an executable mailer";
	echo " such as ssmtp or exim."
	echo
 fi
 if [ ! -e /var/cron/tabs/${USER} ]; then
	echo "WARNING: You do not currently have a crontab file."
	echo
 elif [ ! -r /var/cron/tabs/${USER} ]; then
	echo "ERROR: Your crontab file is not readable."
	echo
	ret=1
 fi
 return ${ret}
} # === End of check_myself() === #
# ======================================================================
# Routine: cron_diagnose
# Checks the environment.
# "nt" and "username" must be set.
# ======================================================================
cron_diagnose() {
 # Check the integrity of the files in the 'cron' package:
 if cygcheck -c cron | grep -F -q 'Incomplete'; then
	echo "'cygcheck -c cron' reports that your cron installation"
	echo "is incomplete. Please consider running 'setup.exe' and"
	echo "selecting 'Reinstall' from the install options."
	echo
 return 1
 fi
 if [ -n "$nt" ]
	then
	get_system_and_admins_ids || return 1
	check_passwd_and_group || return 1
 fi
 if [ -z "$nt" -o "$username" = "$USER" ]
	then
	check_myself
	return $?
 fi
 ret=0
 check_sys_mount /usr/bin /bin || ret=1
 check_sys_mount /usr/lib /lib || ret=1
 check_sys_mount / / || ret=1
 check_dir /etc/cron.d || ret=1
 check_dir /var || ret=1
 check_dir_perms /var/cron || ret=1
 check_dir_perms /var/cron/tabs || ret=1
 # Check write access to /var/run, to create cron_pid
 check_access /var/run .w. || ret=1
 # Check write access to /var/log, to create cron.log
 check_access /var/log .w. || ret=1
 # Check x access to /usr/sbin/cron
 check_access /usr/sbin/cron ..x || ret=1
 # Check x access to /usr/sbin/sendmail
 check_access /usr/sbin/sendmail ..x ||
 echo " ssmtp and exim are suitable mailers."
 check_cron_table || ret=1
 return "${ret}"
} # === End of cron_diagnose() === #
# ======================================================================
# Routine: create_user
# Create a privileged user on Windows 2003
# ======================================================================
create_user() {
 SYSCONFDIR="/etc"
 first_account=""
 accounts=""
 for username in cyg_server cron_server sshd_server
 do
 if net user "${username}" 1> /dev/null 2>&1
	 then
	 [ -z "${first_account}" ] && first_account="${username}"
	 accounts="${accounts}'${username}' "
 fi
 done
 if [ -n "${accounts}" ]; then
	echo "The following accounts were found: ${accounts}."
	username="${first_account}"
 else
	echo "No privileged account could be found."
	username="cyg_server"
 fi
 echo "This script plans to use ${username}."
 if request "Do you want to use another name?"; then
	getvalue "Enter the new user name: "
	username="${value}"
 fi
 net user "${username}" >/dev/null 2>&1 && username_in_sam=yes
 if [ "$username_in_sam" != "yes" ]
	then
	echo
	echo "User $username needs a password. It must match"
	echo "the rules in force on your system."
	getvalue "Please enter the password: "
	_password="${value}"
	net user "${username}" "${_password}" /add /fullname:"Privileged server" /yes > /tmp/nu.$$ 2>&1 && username_in_sam=yes
	if [ "${username_in_sam}" != "yes" ]
	 then
	 echo "Creating the user '"${username}"' failed! Reason:"
	 cat /tmp/nu.$$
	 rm /tmp/nu.$$
	 exit 1
	else
	 echo
	 echo "User '"${username}"' has been created with password '${_password}'."
	 echo "If you change the password, please keep in mind to change the password"
	 echo "for the cron service, too."
	 echo
	fi
	passwd_has_expiry_flags=`passwd -v | awk '/^passwd /{print ( 3ドル >= 1.5 ) ? "yes" : "no";}'`
	if [ "${passwd_has_expiry_flags}" != "yes" ]
	 then
	 echo "WARNING: User "${username}" has password expiry set to system default."
	 echo "Please check that password never expires or set it to your needs."
	 echo
	elif ! passwd -e "${username}"
	 then
	 echo "WARNING: Setting password expiry for user "${username}" failed!"
	 echo "Please check that password never expires or set it to your needs."
	 echo
	fi
 fi
 _admingroup="$( mkgroup -l | awk -F: '{if ( 2ドル == "S-1-5-32-544" ) print 1ドル;}' )"
 if [ -z "${_admingroup}" ]
 then
	echo "ERROR: Cannot obtain the Administrators group name."
	exit 1
 fi
 if net localgroup "${_admingroup}" | grep -Eiq "^${username}.?\$"; then
	true
 else
	net localgroup "${_admingroup}" "${username}" /add > /dev/null 2>&1 && username_in_admingroup=yes
	if [ "${username_in_admingroup}" != "yes" ]
	 then
	 echo "WARNING: Adding user "${username}" to group ${_admingroup} failed!"
	 echo "Please add "${username}" to group ${_admingroup} before"
	 echo "starting the sshd service!"
	 echo
	fi
 fi
 if [ ! -x /usr/bin/editrights ]; then
	echo "WARNING: The editrights program cannot be found or is not executable."
	echo" Unable to insure that ${username} has the appropriate privileges."
 else
	editrights -a SeAssignPrimaryTokenPrivilege -u "${username}" &&
	editrights -a SeCreateTokenPrivilege -u "${username}" &&
	editrights -a SeDenyInteractiveLogonRight -u "${username}" &&
	editrights -a SeDenyNetworkLogonRight -u "${username}" &&
	editrights -a SeDenyRemoteInteractiveLogonRight -u "${username}" &&
	editrights -a SeIncreaseQuotaPrivilege -u "${username}" &&
	editrights -a SeServiceLogonRight -u "${username}" &&
	username_got_all_rights="yes"
	if [ "${username_got_all_rights}" != "yes" ]
	 then
	 echo
	 echo "Assigning the appropriate privileges to user '${username}' failed!"
	 echo "Can't create sshd service!"
	 exit 1
	fi
 fi
 grep -Eiq "\^${username}\:" ${SYSCONFDIR}/passwd && username_in_passwd=yes
 if [ "${username_in_passwd}" != "yes" ]
	then
	mkpasswd -l -u "${username}" | sed -e 's/bash$/false/' >> ${SYSCONFDIR}/passwd
 fi
}
# ======================================================================
# Routine: install_service
# Install cron as a service.
# Start the service or start cron as a job.
# ======================================================================
install_service() {
 service="job"
 servtest=""
 # The default is valid for jobs
 username="$USER"
 if [ -z "$nt" ]; then
	cronregpath='\HKLM\Software\Microsoft\Windows\CurrentVersion\RunServices\Cron'
	cronregdata=`regtool -q get $cronregpath`
 elif [ ! -e /usr/bin/cygrunsrv.exe ]; then
	echo "INFO: Download cygrunsrv to start the mailer daemon as a service."
	servtest=no
 else
	cygrunsrv -Q cron > /dev/null 2>&1
	servtest=$?
 fi
 if [ -z "$nt" -a -n "$cronregdata" ]; then
	echo "Cron is already installed as a service."
	echo " Key: $cronregpath"
	echo " Value: $cronregdata".
	if request "Do you want to remove or reinstall it?"; then
	 if regtool unset "$cronregpath"; then
		echo "OK. The cron service was removed."
		echo
	 fi
	else
	 servtest=no
	fi
 elif [ -n "$nt" -a "${servtest}" = "0" ]; then
	echo "Cron is already installed as a service."
	if request "Do you want to remove or reinstall it?"; then
	 if cygrunsrv -R cron; then
		echo "OK. The cron service was removed."
		echo
	 fi
	else
	 cronuser="/proc/registry/HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Services/cron/ObjectName"
	 username="$(sed 's/.*\\\|LocalSystem//' "${cronuser}")"
	 service="service"
	 servtest=no
	fi
 fi
 if [ "${servtest}" = "no" ]; then
	true
 elif request "Do you want to install the cron daemon as a service?"; then
	if [ -n "$nt" ]; then
	 echo "The service can run either as yourself or under a privileged account."
	 echo "Running as yourself allows better access to network drives,"
	 echo "but does not allow to run the crontab of other users."
	 if [ -n "$nt2003" ]; then
		echo "On Windows2003 the SYSTEM account does not allow to setuid to other users."
		echo "You will need to have or to create a privileged account."
		echo "This script will help you do so."
	 fi
	 if request "Do you want to the cron daemon to run as yourself?"; then
		if [ -x /usr/bin/editrights ] && editrights -a SeServiceLogonRight -u "${username}"; then
		 true
		else
		 echo "WARNING: Make sure you have the privilege to logon as a service."
		fi
	 else
		echo
		username=""
		[ -n "$nt2003" ] && create_user
	 fi
	 echo
	 ntsec="nontsec"
	 if request "Do you want the daemon to run with ntsec?"
		then
		ntsec="ntsec"
	 fi
	 echo
	 if [ "$username" ]
		then
		if [ -z "${_password}" ]
		 then
		 getvalue "Please enter the password for user '$username'."
		 _password="${value}"
		fi
		if cygrunsrv -I cron -p /usr/sbin/cron -e CYGWIN="${ntsec}" \
		 -a "-D" -d "Cron daemon" -u "$username" -w "$_password"
		 then
		 service="service"
		else
		 service="off"
		fi
	 else
		if cygrunsrv -I cron -p /usr/sbin/cron -e CYGWIN="${ntsec}" \
		 -a "-D" -d "Cron daemon"
		 then
		 service="service"
		else
		 service="off"
		fi
	 fi
	else
	 cronregdata="\"`cygpath -wl /usr/sbin/cron`\""
	 if regtool set "$cronregpath" "$cronregdata"
		then
		echo "OK. The registry was set:"
		echo " Key: $cronregpath"
		echo " Value: $cronregdata".
		echo " This will only take effect at the next reboot."
	 fi
	fi
 fi
 echo
 #############################
 # Run diagnostic
 #############################
 if ! cron_diagnose; then
	echo "There are serious issues with your environment."
	echo "You should look into them and run this script again."
	request "Do you want to continue anyway? " || exit 1
 fi
 #############################
 # Start the daemon?
 #############################
 if ps -es | grep -Fqi '/usr/sbin/cron'; then
	echo "INFO: An cron daemon is already running."
 elif [ "${service}" != "off" ]; then
	for file in /var/run/cron.pid /var/log/cron.log ; do
	 chown "${USER}" "${file}" 1> /dev/null 2>&1
	 rm -f "${file}"
	 if [ -f "${file}" ]; then
		echo "WARNING: ${file} could not be deleted."
		echo " Make sure the daemon can write to it."
		echo
	 fi
	done
	if request "Do you want to start the cron daemon as a ${service} now?"; then
	 if [ "${service}" = "job" ]; then
		/usr/sbin/cron
	 else
		cygrunsrv -S cron
	 fi
	 [ $? -eq 0 ] && echo "OK. The cron daemon is now running."
	elif [ "${service}" = "job" ]; then
	 echo "OK. Type '/usr/sbin/cron' to start the cron daemon job."
	elif [ -n "$nt" ]; then
	 echo "OK. Type 'cygrunsrv -S cron' to start the cron daemon service."
	 echo " It will restart automatically at each reboot."
	fi
 fi
 echo
 echo "In case of problem, examine the log file for cron, /var/log/cron.log,"
 if [ -n "$nt" ]; then
	echo "and the Windows event log"
 else
	echo "and the Cygwin syslog"
 fi
 echo "for information about the problem cron is having."
 echo
 echo "If you cannot fix the problem, then report it to cygwin@cygwin.com."
 echo "Please include a copy of your crontab, ('crontab -l')"
 echo "and the output of 'cygcheck -srv > cygcheck.txt'."
 echo
 echo "Please include the generated file 'cygcheck.txt' *as an attachment*,"
 echo "and NOT in the body of the mail message."
} # === End of install_service() === #
# Entry point:
# Set PATH to use the Cygwin programs
PATH=/usr/bin:/bin:$PATH
USER="$(id -un)"
sanity_check || return 1
get_NT
install_service
exit $?
-------------- next part --------------
--
Unsubscribe info: http://cygwin.com/ml/#unsubscribe-simple
Problem reports: http://cygwin.com/problems.html
Documentation: http://cygwin.com/docs.html
FAQ: http://cygwin.com/faq/


More information about the Cygwin mailing list

AltStyle によって変換されたページ (->オリジナル) /