Solved

Find EOM in Unix crontab

Posted on 2014-10-31
15
337 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
Connect further...control easier

With the ATEN CE624, you can now enjoy a high-quality visual experience powered by HDBaseT technology and the convenience of a single Cat6 cable to transmit uncompressed video with zero latency and multi-streaming for dual-view applications where remote access is required.

 

Author Comment

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

Expert Comment

by:Gerwin Jansen, EE MVE
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
 
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 38

Expert Comment

by:Gerwin Jansen, EE MVE
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 38

Expert Comment

by:Gerwin Jansen, EE MVE
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

Ransomware-A Revenue Bonanza for Service Providers

Ransomware – malware that gets on your customers’ computers, encrypts their data, and extorts a hefty ransom for the decryption keys – is a surging new threat.  The purpose of this eBook is to educate the reader about ransomware attacks.

Question has a verified solution.

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

Suggested Solutions

Workplace bullying has increased with the use of email and social media. Retain evidence of this with email archiving to protect your employees.
Let’s list some of the technologies that enable smooth teleworking. 
This video shows where to find templates, what they are used for, and how to create and save a custom template using Microsoft Word.
The viewer will learn how to successfully create a multiboot device using the SARDU utility on Windows 7. Start the SARDU utility: Change the image directory to wherever you store your ISOs, this will prevent you from having 2 copies of an ISO wit…

821 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