[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
RE: Comments on the diagram(was:RE:[Pyatcron-devel-list]Cronbackend: a c
From: |
NICOLOVICI Xavier |
Subject: |
RE: Comments on the diagram(was:RE:[Pyatcron-devel-list]Cronbackend: a correction) |
Date: |
Thu, 20 Nov 2003 17:20:14 +0100 |
Brian,
There
is an option to the crontab command that let you edit the config file of a
particular user, when you're root of course. So I would prefer use this way
instead of opening directly files. I've found that the crontab software does not
only edit the crontab files, but also change the MTIME of the /var/spool/cron
folder, which makes the Cron daemon knows that some changes have been
done.
So, if
software is used as normal user:
entries = commands.getoutput('crontab
-l').split('\n')[3:]
If
used as root:
entries =
commands.getoutput('crontab -u <username>
-l').split('\n')[3:]
The
goal now is to build the list of users on the system.
Another thing, I do not like your option of skipping the first three
lines, what if I manually edit the crontab files? Or if a new crontab software
release write two lines of comments instead of three?
No,
this is a really bad a way to skip comment lines. Do it as we do it
everywhere:
for
each $line in <file> {
remove trailing spaces from
$line
check if first character of $line =
'#'
if not
do stuff with
$line
else
skip
file
end
for
Bye,
Xavier
On Wed, 2003-11-19 at 01:10, NICOLOVICI Xavier
wrote:
Brian,
About the
getCommand of the CronEntry and AtEntry class. I think that they must be
renamed to getRegisterString.
This function
should return a string used to register the task. For the CronEntry, the
getRegisterString will return:
"* * * * * /the/command/to/run -its
-parameters"
This first fileds will be build with the Schedule
fields and the command to run will be build with the GenericTask pointed by
the Schedule object.
Does this makes things a bit clear to you?
Okay, I'll work on those things. So,
according to what you've just said and the class diagrams, I should make what
I had has CronTask.py into Scheduler.py, and a CronEntry.py file that inherits
from Scheduler.py and gets the RegisterString that way. And then do something
similar with AtEntry.py. Right?
Now, I'm currently thinking about a CronEntryCollector
and an AtEntryCollector who will be in charge of parsing the existing
cron and at entries (ie retrieve the definitions from system), manage list
of CronEntry and AtEntry (addition and deletion of some), export those list
to a GtkList, and rebuild the system cron and at entries.
The process flow
will then be as follow:
1. Create CronEntryCollector
2.
CronEntryCollector.parseUserCrontab(<username>)
Normally, we would only include the crontab of
the user running pyatcron, right? Do we want to implement something where if
root runs pyatcron, he/she could view all of the other user's crontabs as
well? If so, we would need two ways of doing it. First, since /var/spool/cron
is only readable by root, to get the crontab of the user running the program,
we would do something like this:
import commands
entries =
commands.getoutput('crontab -l').split('\n')[3:]
This brings in each
cron entry into a list ( the [3:] makes sure we don't get those first three
lines that are just comments about the crontab, etc.) Then, we can just parse
through it, making it more "human readable" so that the tasklist will display
when the job(s) run.
If it's root running it, and we want him/her to
view all users crontabs, we would have to parse the actual files in
/var/spool/cron for each user:
cronfile =
file('/var/spool/cron/<user>', 'r')
entries =
cronfile.readlines()[3:]
I was playing around with this last night (as
you can tell) trying to figure out whether to make each entry its own object,
or just leave them as lists. What do you all think?
Also, as I don't know
as much about GTK, how would we output the entries into the tasklist ListStore
in mainwin.py ???
This e-mail contains proprietary information some or all of which may be legally privileged. It is intended for the recipient only. If an addressing or a transmission error has misdirected this e-mail, please notify the author by replying to the e-mail. If you are not the intended recipient you must not use, disclose, distribute, copy, print, or rely on this e-mail.
We take reasonable precautions to ensure our e-mails are virus free. However, we cannot accept responsibility for any virus transmitted by us and recommend that you subject any incoming e-mail to your own virus checking procedures.