On reading documentation when programs don't work as expected
No matter how often you use UNIX tools, once in a while you get caught out trying to put everything together. This happened this morning while I was setting up a cronjob and it didn't work as expected.
This happened to me earlier this week when I tried to setup a quick cron script to dump the contents of an SQL table every day. I had set it up as follows:
37 3 * * * /usr/lib/postgresql/8.2/bin/pg_dump db -U backup -t table | bzip2 - > /backups/table-monitoring/`date +%Y%m%d`.table.sql.bz2
I checked the next day that things were working and found the directory empty. Interesting.
After a quick check of my email I found the culprit:
/bin/sh: -c: line 0: unexpected EOF while looking for matching `"' /bin/sh: -c: line 1: syntax error: unexpected end of file
This is where things got complicated. Had I checked crontab(5) this story would probably have ended here. I didn't.
After a couple of attempts at escaping this command line to make things work I ended up with the following:
backup:~% ls /backups/table-monitoring | head -n 3 `date \+%Y%m%d`.table.sql.bz2 date +%Y%m%d.table.sql.bz2
Even more interesting...
Turns out the answer is quite simple. The man page has this to say about it:
The ‘‘sixth’’ field (the rest of the line) specifies the command to be run. The entire command portion of the line, up to a newline or % character, will be executed by /bin/sh or by the
shell specified in the SHELL variable of the crontab file. Percent-signs (%) in the command, unless escaped with backslash (\), will be changed into newline characters, and all data after
the first % will be sent to the command as standard input. There is no way to split a single command line onto multiple lines, like the shell’s trailing "\".
Ooops. A quick change later, I end up with the following snippet:
37 3 * * * /usr/lib/postgresql/8.2/bin/pg_dump db -U backup -t table | bzip2 - > /backups/table-monitoring/`date +\%Y\%m\%d`.table.sql.bz2
I'm still wondering about the usefulness of the % to send data to the standard input as opposed to using standard pipes though.
- Lead Business Analyst - Equities (P4)11/03/2010
Other
I.T. & T
Lead Business Analyst - Equities (P4) - Project Scheduler11/03/2010
Other
I.T. & T
Project Scheduler - Middleware Enterprise Architect - 2 Month Contract11/03/2010
Other
I.T. & T
Middleware Enterprise Architect - 2 Month Contract - Test Analyst - Financial Services - Perm -Sydney CBD11/03/2010
Other
I.T. & T
Test Analyst - Financial Services - Perm -Sydney CBD - MAJOR BUSINESS DEVELOPMENT - NSW STATE GOVERNMENT VERTICAL11/03/2010
Other
I.T. & T
MAJOR BUSINESS DEVELOPMENT - NSW STATE GOVERNMENT VERTICAL - SNR SECURITY GURU - APPLICATIONS11/03/2010
Other
I.T. & T
SNR SECURITY GURU - APPLICATIONS - SAP MAM Consultant11/03/2010
Other
I.T. & T
SAP MAM Consultant
TechWorld Blogs
Recent blog posts
- All aboard the Avatar Economy
- Facebook, PayPal tie up ad payments
- Google goes for more markets: too much too quickly?
- Talk about mobile computing
- iPad arrives: can Apple crack the tablet?
- Linux.conf.au 2010 kicks off in New Zealand
- VMware jumps further into SaaS with Zimbra
- Amarok 2.2.2 released – rock on!
- Happy Nexus Year
- So long 2009, and thanks for another decade in tech







Recent comments
9 hours 41 sec ago
19 hours 9 min ago
1 day 1 hour ago
1 day 14 hours ago
2 days 7 hours ago
3 days 3 hours ago
4 days 4 hours ago
4 days 7 hours ago
5 days 17 hours ago
5 days 17 hours ago
6 days 7 hours ago
1 week 51 min ago
1 week 10 hours ago
1 week 11 hours ago
1 week 12 hours ago
1 week 2 days ago
1 week 2 days ago
1 week 2 days ago
1 week 2 days ago
1 week 2 days ago