Solved

Find EOM in Unix crontab

Posted on 2014-10-31
15
316 Views
Last Modified: 2014-11-07
I have a command to run a script in crontab but it doesn't work.  This is the command   test `echo \`cal\`|awk '{print $NF}'` -eq `date +\%d`.  What is wrong with it?
0
Comment
Question by:OCCU
  • 8
  • 4
  • 3
15 Comments
 
LVL 68

Accepted Solution

by:
woolmilkporc earned 500 total points
ID: 40416643
Backslashes (\) must be escaped (\\) under cron because it eats up the first one:

test `echo \\`cal\\`|awk '{print $NF}'` -eq `date +\%d` &&  <run the script>

The backslash before % is also consumed by cron, so that the percent sign is passed to "date" instead of being interpreted as start of stdin. It must thus not be escaped!

Better use the "$( ... )" notation instead of backticks. No escaping is required then:

test $(echo $(cal) |awk '{print $NF}') -eq $(date +\%d) && <run the script>

You could also replace "test" with "[ ... ]":

[ $(echo $(cal) |awk '{print $NF}') -eq $(date +\%d) ] && <run the script>

All of the above worked for me under AIX.


wmp
0
 

Author Comment

by:OCCU
ID: 40416647
If it returns a true it will run script.  This script does work.
0
 
LVL 68

Expert Comment

by:woolmilkporc
ID: 40416653
Did you try my suggestions?
0
 

Author Comment

by:OCCU
ID: 40416660
I will try it tonight and let you know.
0
 
LVL 37

Expert Comment

by:Gerwin Jansen
ID: 40416665
This part:

echo \`cal\`

is not executing the cal command, it is merely echoing the string cal - this is why your command in your script is not working.
0
 
LVL 68

Expert Comment

by:woolmilkporc
ID: 40416666
If you're on Linux (or have GNU date installed on Unix) you could also use its features instead of "cal":

test $(date -d "-1 days +1 month" "+\%d") -eq $(date "+\%d")  && <run the script>
0
 

Author Comment

by:OCCU
ID: 40416669
If I remove the echo would it work?
0
Control application downtime with dependency maps

Visualize the interdependencies between application components better with Applications Manager's automated application discovery and dependency mapping feature. Resolve performance issues faster by quickly isolating problematic components.

 
LVL 68

Expert Comment

by:woolmilkporc
ID: 40416670
Gerwin - please note that it's nested backticks!

So e. g.

echo `echo \`cal\``

works on command line, but not under cron. The inner backticks must be escaped twice there.
0
 
LVL 37

Expert Comment

by:Gerwin Jansen
ID: 40416673
Only change you need to make is getting the cal command to run:

test `echo $(cal) | awk '{print $NF}'` -eq `date +%d`

Open in new window

^^^ this is working and is returning a $? of 0 (so true).
0
 
LVL 37

Expert Comment

by:Gerwin Jansen
ID: 40416674
@wmp - I know - I never nest backticks :D
0
 
LVL 68

Expert Comment

by:woolmilkporc
ID: 40416675
>> If I remove the echo would it work?   <<

No, because you'll get multi line output then.

This will work:

cal | tail -1 |awk '{print $NF}'
0
 
LVL 68

Expert Comment

by:woolmilkporc
ID: 40416677
Gerwin - I don't even use backticks if at all possible!
0
 

Author Comment

by:OCCU
ID: 40422169
I was able to get my script to run by using [ $(echo $(cal) |awk '{print $NF}') -eq $(date +\%d) ] &&.

Thanks for your help
0
 
LVL 68

Expert Comment

by:woolmilkporc
ID: 40422176
You're always welcome. Glad I could help!

wmp
0
 
LVL 68

Expert Comment

by:woolmilkporc
ID: 40429080
Please, what are your reasons for giving grade B?
You wrote above that you followed exactly my suggestion!

Please read here about awarding grades.

Quote:
B is the grade given for acceptable solutions, or a link to an acceptable solution. A B grade means the solution given lacked some information or required you to do a good amount of extra work to resolve the problem. When closing the question, the asker should explain why a B grade was awarded.
Should you want to review your decision click "Request Attention" above and explain your demand.

wmp
0

Featured Post

PRTG Network Monitor: Intuitive Network Monitoring

Network Monitoring is essential to ensure that computer systems and network devices are running. Use PRTG to monitor LANs, servers, websites, applications and devices, bandwidth, virtual environments, remote systems, IoT, and many more. PRTG is easy to set up & use.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

Title # Comments Views Activity
Adobe Customization Wizard XI issues 26 208
Dropbox 3 72
mscorsvw.exe has been running for weeks on our SBS2011 Server 5 37
VBA MS Word "Table of Contents" extractor` 4 22
A high-level exploration of how our ever-increasing access to information has changed the way we do our jobs.
Let’s list some of the technologies that enable smooth teleworking. 
This video shows where to find the word count, how to display it, and what it breaks down to in Microsoft Word.
The view will learn how to download and install SIMTOOLS and FORMLIST into Excel, how to use SIMTOOLS to generate a Monte Carlo simulation of 30 sales calls, and how to calculate the conditional probability based on the results of the Monte Carlo …

911 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

22 Experts available now in Live!

Get 1:1 Help Now