I am obsessive about keeping track of things. I used to get a free calendar each year from the local phone company. It was the perfect interface for all my appointments—a slim, spiral-bound calendar that I kept on my desktop and used to record any upcoming appointments, as well as mark the birthdays of my friends and family. Every year around the holidays I'd get a new calendar and dutifully re-transcribe the birthdays and other annual appointments into the new calendar.
A few years ago, the phone company decided to stop sending out these free calendars, but fortunately I had found a better way. By using cal and calendar programs, I can leave all my old analog date books behind.
Different versions of these utilities exist. Originally part of the BSD utilities, a GNU version called gcal with some advanced features has been released. I will focus this tutorial on the original BSD programs since they're widely available, as well as mention some other related programs at the end of the article.
You'll first want to find out if you have these programs installed on your system by typing:
If which returns a full pathname of the cal program, it is installed. If instead you are immediately returned to a shell prompt, then you will need to obtain and install this program. You can use which again to see if you have the calendar program installed as well; they are different programs and you will need them both.
If you use the Debian distribution of Linux, both programs are available in the bsdmainutils package. Otherwise, consult your distribution, or search the Linux Software Map at http://www.linuxresources.com/apps.html.
calendar is a basic reminder service. It reads a file called calendar in the current directory and prints lines which start with today's or tomorrow's dates. The calendar file is a text file that can be created and edited with any text editor.
This program is more powerful than it may seem at first. The general format for a calendar file entry is the month and day to the immediate left, followed by a tab and the reminder text. The month and day can be skipped—each line beginning with a tab carries the same month and day value as the line preceding it.
There is quite a varied syntax for the month and day. To demonstrate, let's make up a sample calendar file and look at it line by line:
10/31 Johnny's Halloween party Friday Garbage day Nov. 20 Dentist appointment, 9:30am 20/11 Mandatory staff meeting, 10:00am January Happy new year! Have you made your resolutions yet? 18 * Rent's due
Let's imagine that today is Friday, October 31, 1997. At the shell prompt, type:
calendarWith the sample calendar file in your current directory, you will see this output:
10/31 Johnny's Halloween party Friday Garbage dayThe 10/31 in the first line tells calendar to print that line if it is October 31 (or the day before), and the Friday in the second line tells it to print (you guessed it) every Friday.
As you can see, you can also use an abbreviated form of writing out the month, as in the example line starting with Nov. 20. Now, on the fourth line, the mm/dd format is reversed—in this case, calendar figures that out and will print it on the 20th day of November. It's probably not a good idea to keep records in this format. If you were to write May 10th as 10/5, calendar will assume you mean the U.S. convention of mm/dd and print that entry on October 5th.
If you have just the name of a month in the first column, calendar will print the entry on the first of that month. If you eliminate that column altogether by inserting a tab and some reminder text, calendar will print the line on the date of the preceding entry. Thus, on New Year's Day, our example calendar will output:
January Happy new year! Have you made your resolutions yet?
Finally, substituting an asterisk for the month will print that entry on the stated date each month. In our example, a reminder to pay the rent will be displayed on the eighteenth of each month.
Since it is pre-processed by cpp, the C preprocessor, calendar recognizes include files. This allows you to keep and use special lists, such as a personal list of birthdays, without cluttering up your main calendar file. The calendar program comes with a set of such files in /usr/lib/calendar/ to get you started:
calendar.birthday: birth and death dates of many famous historical figures
calendar.computer: important dates in the history of computing
calendar.holiday: known (and not-so-well-known) holidays
calendar.music: important dates in music, especially mainstream rock-n-roll
calendar.christian: Christian holidays
calendar.history: many historical events
calendar.judaic: Jewish holidays
calendar.usholiday: standard US holidays
When you use an include statement, calendar first searches the directory it was called in, and then looks in /usr/lib/calendar/. Including this line in your file,
#include <calendar.usholiday>means calendar will first look in the current directory for such a file. If not present, it will then check /usr/lib/calendar/, and if the appropriate file is found, include it.
One of the functions of my old paper calendar was to record and keep a record of important events in my life. I was able to reproduce this function by keeping this information in files named calendar.yyyy, such as calendar.1997. Looking through the files in order gives me a chronological record of major events in my life, and if I ever wanted to see what I was doing around today's date in a certain year or years, I could add include statements for the appropriate calendar.yyyy files in my calendar file.
Practical Task Scheduling Deployment
July 20, 2016 12:00 pm CDT
One of the best things about the UNIX environment (aside from being stable and efficient) is the vast array of software tools available to help you do your job. Traditionally, a UNIX tool does only one thing, but does that one thing very well. For example, grep is very easy to use and can search vast amounts of data quickly. The find tool can find a particular file or files based on all kinds of criteria. It's pretty easy to string these tools together to build even more powerful tools, such as a tool that finds all of the .log files in the /home directory and searches each one for a particular entry. This erector-set mentality allows UNIX system administrators to seem to always have the right tool for the job.
Cron traditionally has been considered another such a tool for job scheduling, but is it enough? This webinar considers that very question. The first part builds on a previous Geek Guide, Beyond Cron, and briefly describes how to know when it might be time to consider upgrading your job scheduling infrastructure. The second part presents an actual planning and implementation framework.
Join Linux Journal's Mike Diehl and Pat Cameron of Help Systems.
Free to Linux Journal readers.Register Now!
- SUSE LLC's SUSE Manager
- My +1 Sword of Productivity
- Murat Yener and Onur Dundar's Expert Android Studio (Wrox)
- Non-Linux FOSS: Caffeine!
- Managing Linux Using Puppet
- Doing for User Space What We Did for Kernel Space
- SuperTuxKart 0.9.2 Released
- Parsing an RSS News Feed with a Bash Script
- Tech Tip: Really Simple HTTP Server with Python
- Rogue Wave Software's Zend Server
With all the industry talk about the benefits of Linux on Power and all the performance advantages offered by its open architecture, you may be considering a move in that direction. If you are thinking about analytics, big data and cloud computing, you would be right to evaluate Power. The idea of using commodity x86 hardware and replacing it every three years is an outdated cost model. It doesn’t consider the total cost of ownership, and it doesn’t consider the advantage of real processing power, high-availability and multithreading like a demon.
This ebook takes a look at some of the practical applications of the Linux on Power platform and ways you might bring all the performance power of this open architecture to bear for your organization. There are no smoke and mirrors here—just hard, cold, empirical evidence provided by independent sources. I also consider some innovative ways Linux on Power will be used in the future.Get the Guide