Cron jobs - files /etc/cron.d/*
This module contains the following parsers:
CronForeman - file /etc/cron.d/foreman
- class insights.parsers.cron_jobs.CronFile(context)[source]
Bases:
Parser
It parses the file at
/etc/cron.d/*`
.Each row of the file is converted into a dictionary with keys for each field. And also the whole line is saved for use to the “raw” key. For example one row would look like:
{ 'minute': '*', 'hour': '*', 'day_of_month': '*', 'month': '*', 'day_of_week': '*', 'username': 'test', 'command': '/usr/bin/keystone-manage token_flush > /dev/null 2>&1', 'raw': '* * * * * * test /usr/bin/keystone-manage token_flush > /dev/null 2>&1' }
It parses the line in the same way that cron(1) does. Lines that are blank or start with a comment are ignored. Environment lines of the form ‘KEY = value’ (with optional spacing around the equals sign) are stored in the environment dictionary. Lines containing a valid cron job, with five recogniseable time fields, username, a command, are stored in the jobs property and accessed through the pseudo-list interface and the search method. All other lines are stored in the invalid_lines property.
It also recognises the extension of time signature ‘nicknames’, which take place of the first five parts of a standard crontab line:
@reboot : Run once after reboot.
@yearly : Run once a year, ie. “0 0 1 1 *”.
@annually : Run once a year, ie. “0 0 1 1 *”.
@monthly : Run once a month, ie. “0 0 1 * *”.
@weekly : Run once a week, ie. “0 0 * * 0”.
@daily : Run once a day, ie. “0 0 * * *”.
@hourly : Run once an hour, ie. “0 * * * *”.
In the case of the ‘@reboot’ nickname, the row will not contain the ‘minute’, ‘hour’, ‘day_of_month’, ‘month’, or ‘day_of_week’ keys, and instead will contain the key ‘time’ with the value ‘@reboot’ (as well as the usual ‘username’ and ‘command’ key). All other nicknames are translated directly into their five-part equivalent and parsed as a normal crontab line.
Sample input:
SHELL=/bin/sh TEST_HOME=/usr/share/test 15 23 * * * test /usr/sbin/testaa 2>&1 >> /var/log/test.log 0 7 * * * test /usr/sbin/testbb 2>&1 >> /var/log/test.log
- jobs
A list of valid jobs info.
- Type:
list
- environment
The environment variables.
- Type:
dict
- invalid_lines
A list of lines which are neither in cron format nor in env variable format.
- Type:
list
- Raises:
ParseException -- When a line starts with ‘@’, but the nickname is unknown.
Examples
>>> type(cron_obj) <class 'insights.parsers.cron_jobs.CronFile'> >>> len(cron_obj.environment) 2 >>> 'TEST_HOME' in cron_obj.environment True >>> cron_obj.environment['TEST_HOME'] '/usr/share/test' >>> len(cron_obj.jobs) 2 >>> cron_obj.jobs[0].get('minute') '15' >>> cron_obj.jobs[0].get('hour') '23' >>> cron_obj.jobs[0].get('username') 'test' >>> '/usr/sbin/testaa' in cron_obj.jobs[0].get('command') True
- search(**kwargs)[source]
Return a list of dict for lines that matches the kwargs.
This uses the
insights.parsers.keyword_search()
function for searching; see its documentation for usage details. If no search parameters are given, a empty list is returned.
- class insights.parsers.cron_jobs.CronForeman(context)[source]
Bases:
CronFile
Parse the
/etc/cron.d/foreman
file.Sample input:
SHELL=/bin/sh PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin RAILS_ENV=production FOREMAN_HOME=/usr/share/foreman # Clean up the session entries in the database 15 23 * * * foreman /usr/sbin/foreman-rake db:sessions:clear 2>&1 | gawk '{ print strftime("[\%Y-\%m-\%d \%H:\%M:\%S]"), $0 }' >>/var/log/foreman/cron.log # Send out recurring notifications 0 7 * * * foreman /usr/sbin/foreman-rake reports:daily 2>&1 | gawk '{ print strftime("[\%Y-\%m-\%d \%H:\%M:\%S]"), $0 }' >>/var/log/foreman/cron.log 0 5 * * 0 foreman /usr/sbin/foreman-rake reports:weekly 2>&1 | gawk '{ print strftime("[\%Y-\%m-\%d \%H:\%M:\%S]"), $0 }' >>/var/log/foreman/cron.log
Examples
>>> type(foreman_jobs) <class 'insights.parsers.cron_jobs.CronForeman'> >>> len(foreman_jobs.environment) 4 >>> 'FOREMAN_HOME' in foreman_jobs.environment True >>> foreman_jobs.environment['FOREMAN_HOME'] '/usr/share/foreman' >>> len(foreman_jobs.jobs) 3 >>> foreman_jobs.jobs[0].get('minute') '15' >>> foreman_jobs.jobs[0].get('hour') '23' >>> foreman_jobs.jobs[0].get('username') 'foreman' >>> 'db:sessions:clear' in foreman_jobs.jobs[0].get('command') True