Writing a script to run weekly/monthly - check for weekday or day-of-the-month
Hi all,
I currently have a UNIX file maintenance script that runs daily as a cron job.
Now I want to change the script and create functions/sub inside it that runs on a weekly or monthly basis.
To run all the scripts' daily maintenance, I want to schedule it in cron as simply maint.sh when it runs all of its daily maintenance. To run its weekly maintenance functions/subs, I schedule it as maint.sh weekly=6 where 6 is saturday. To run its monthly task, I schedule it as maint.sh monthly=15, i.e. every 15th of the month. Not sure whether I can do monthly=eom where eom is to run functions/sub for every end of the month.
At the moment, am playing around with the weekly functions/sub and what I've done so far is to do something like below
Then I compare the day_of_week_n variable with the value of the command below:
And then I use if-then-else to compare if current day of the week matches, then it will run the weekly functions/sub. So weekly=6 will run saturday's functons/sub, weekly=1 will run monday's functions/sub and so on.
Am wanting to know if there is a better way of parsing for the day of the week besides what am doing at the moment which is using case and then doing if-then-else to check for the day of the week.
For the monthly functions/sub, I uses the value of the one below and uses if-then-else again to compare it when monthly=15.
Perhaps anyone can advice if there is any way I can check for end of month?
Hi ,
I am relatively new to unix...
Can u pls help me out to find out if the first day of the month is a working day ie from (Monday to Friday)...using Date and If clause in Korn shell..
This is very urgent.
Thanks for ur help... (7 Replies)
Hi,
I would like to find out how can i calculate a date which is 3 months ago. I intend to run a cron job on the 1st of every month, and calculate the month 4 months earlier from the date. For example, if today's date is 1st May 2007, i would like to return 012007( January 2007).
i can get... (1 Reply)
I know I can't schedule this in cron and would have to write a wrapper around my script and schedule it in cron ....but not sure how do to this?
How do I exclude Monday if the 2nd day of the month falls on a Monday?
Thanks.
I tried this:
0 0 2 * 0,2-6 command
And I know this doesnt... (2 Replies)
Hi All,
I need to find the previous month last day minus one day, using shell script. Can you guys help me to do this.
My Requirment is as below:
Input for me will be 2000909(YYYYMM)
I need the previous months last day minus 1 day timestamp. That is i need 2000908 months last day minus ... (3 Replies)
Hi,
I would like to write a script that checks if a file ('counter') was modified the previous day, if so erase its contents and write 00000000 into it.
For e.g. if the file 'counter' was last modified at 11.30pm on 24th May and the script runs at 12.15am of 25th May, it should erase it's... (1 Reply)
Hello All,
I am trying to come up with a shell script to count a specific word in a logfile on each day of this month, last month and the month before. I need to produce this report and email it to customer.
Any ideas would be appreciated! (5 Replies)
Hello Experts,
I have a script which i want to run the on last day of every month.
let say I have backup.sh script which i want to run it every month last day.
Can anyone please help :confused:
thanks (4 Replies)
Hello Experts/Guru,
I need a help in running the script on every month last day....
PS: due to some constrain I can't schedule in crontab
Requirement:
On Jan 31st i want to run some script, similarly on Feb 28th, March 31st, April 30th......till Dec 31st.
Please help me by providing... (3 Replies)
I am looking for a unix script which could run a job on 2, 4 and 7 working day of the month.
if the days are falling on the saturday/sunday. it should run on the next day.
Thank you.. (9 Replies)
Discussion started by: tradingspecial
9 Replies
LEARN ABOUT FREEBSD
periodic
PERIODIC(8) BSD System Manager's Manual PERIODIC(8)NAME
periodic -- run periodic system functions
SYNOPSIS
periodic directory ...
DESCRIPTION
The periodic utility is intended to be called by cron(8) to execute shell scripts located in the specified directory.
One or more of the following arguments must be specified:
daily Perform the standard daily periodic executable run. This usually occurs early in the morning (local time).
weekly Perform the standard weekly periodic executable run. This usually occurs very early on Saturday mornings.
monthly Perform the standard monthly periodic executable run. This usually occurs on the first day of the month.
security
Perform the standard daily security checks. This is usually spawned by the daily run.
path An arbitrary directory containing a set of executables to be run.
If an argument is an absolute directory name it is used as is, otherwise it is searched for under /etc/periodic and any other directories
specified by the local_periodic setting in periodic.conf(5) (see below).
The periodic utility will run each executable file in the directory or directories specified. If a file does not have the executable bit
set, it is silently ignored.
Each script is required to exit with one of the following values:
0 The script has produced nothing notable in its output. The <basedir>_show_success variable controls the masking of this output.
1 The script has produced some notable information in its output. The <basedir>_show_info variable controls the masking of this output.
2 The script has produced some warnings due to invalid configuration settings. The <basedir>_show_badconfig variable controls the mask-
ing of this output.
>2 The script has produced output that must not be masked.
If the relevant variable (where <basedir> is the base directory in which the script resides) is set to ``NO'' in periodic.conf, periodic will
mask the script output. If the variable is not set to either ``YES'' or ``NO'', it will be given a default value as described in
periodic.conf(5).
All remaining script output is delivered based on the value of the <basedir>_output setting.
If this is set to a path name (beginning with a '/' character), output is simply logged to that file. newsyslog(8) knows about the files
/var/log/daily.log, /var/log/weekly.log and /var/log/monthly.log, and if they exist, it will rotate them at the appropriate times. These are
therefore good values if you wish to log periodic output.
If the <basedir>_output value does not begin with a '/' and is not empty, it is assumed to contain a list of email addresses, and the output
is mailed to them. If <basedir>_show_empty_output is set to ``NO'', then no mail will be sent if the output was empty.
If <basedir>_output is not set or is empty, output is sent to standard output.
ENVIRONMENT
The periodic utility sets the PATH environment to include all standard system directories, but no additional directories, such as
/usr/local/bin. If executables are added which depend upon other path components, each executable must be responsible for configuring its
own appropriate environment.
FILES
/etc/crontab the periodic utility is typically called via entries in the system default cron(8) table
/etc/periodic the top level directory containing daily, weekly, and monthly subdirectories which contain standard system peri-
odic executables
/etc/defaults/periodic.conf the periodic.conf system registry contains variables that control the behaviour of periodic and the standard
daily, weekly, and monthly scripts
/etc/periodic.conf this file contains local overrides for the default periodic configuration
EXIT STATUS
Exit status is 0 on success and 1 if the command fails.
EXAMPLES
The system crontab should have entries for periodic similar to the following example:
# do daily/weekly/monthly maintenance
0 2 * * * root periodic daily
0 3 * * 6 root periodic weekly
0 5 1 * * root periodic monthly
The /etc/defaults/periodic.conf system registry will typically have a local_periodic variable reading:
local_periodic="/usr/local/etc/periodic"
To log periodic output instead of receiving it as email, add the following lines to /etc/periodic.conf:
daily_output=/var/log/daily.log
weekly_output=/var/log/weekly.log
monthly_output=/var/log/monthly.log
To only see important information from daily periodic jobs, add the following lines to /etc/periodic.conf:
daily_show_success=NO
daily_show_info=NO
daily_show_badconfig=NO
DIAGNOSTICS
The command may fail for one of the following reasons:
usage: periodic <directory of files to execute> No directory path argument was passed to periodic to specify where the script fragments
reside.
<directory> not found Self explanatory.
SEE ALSO sh(1), crontab(5), periodic.conf(5), cron(8), newsyslog(8)HISTORY
The periodic utility first appeared in FreeBSD 3.0.
AUTHORS
Paul Traina <pst@FreeBSD.org>
Brian Somers <brian@Awfulhak.org>
BUGS
Since one specifies information about a directory using shell variables containing the string, <basedir>, <basedir> must only contain charac-
ters that are valid within a sh(1) variable name, alphanumerics and underscores, and the first character may not be numeric.
BSD August 30, 2007 BSD