5

Problem statement

I have 5 solaris boxes, some have Solaris 10 and some have Solaris 9.
All of them have many cronjobs in their crontabs.

I would like to know number of active cronjobs available, so I manually count the cronjobs.

Now I am looking for a command [bash shell I am using] to count the number of active cronjobs.

I have tried crontab -l|wc -l, but my crontab contains many comments lines which are also counted with my command. crontab

What I have tried

crontab -l|wc -l 

What I am expecting

A bash shell command to count the number of active cronjobs (excluding comments lines).

3
  • Which cron implementation are you using? Some of them allow directives like @daily or @hourly, which also define jobs. Commented Feb 9, 2012 at 9:01
  • @ manatwork Im a newbee,I dont understand ur statement,I did not use @daily like commands. Commented Feb 9, 2012 at 9:39
  • This days most of the crons are actually improved rewrites of cron, like anacron, dcron, fcron, mcron. They are all compatible with the original one, but usually they add something new too, by introducing directives with proprietary syntax. Anyway, if you use no directives, you can safely ignore my question. Commented Feb 9, 2012 at 9:58

5 Answers 5

3

You need to delete everything that does not start with a digit (the minute). But to get that, remove any leading whitespace first. This will get rid of comments, blank lines, variable assignments, etc.

crontab -l 2>/dev/null | sed 's/^ *//;/^[*@0-9]/!d' | wc -l 
3
  • 1
    What about entries starting with a * or @? Commented Feb 9, 2012 at 10:10
  • Correct, I missed the "*". Thanks. Commented Feb 9, 2012 at 12:29
  • 1
    I would add 2>/dev/null to the first command, so if there no job, then no error output. Commented Feb 17, 2021 at 20:02
2
crontab -l | grep -v '^#' 

Simple.

The number?

crontab -l | grep -v '^#' | wc -l 

or

crontab -l | grep -c -v '^#' 

(last one inspired by an answer here).

This will give you the (number of) scheduled cron jobs, not the active cron jobs, which could mean the jobs that are currently running.

1
  • 2
    This counts empty lines, lines with an indented comment, and lines containing environment variable definitions. Commented Feb 9, 2012 at 23:03
2

Why remove characters? Try the following:

$ crontab -l | grep -c "^[0-9*]" 
5
  • says illegal option -p on my solaris box Commented Feb 9, 2012 at 8:47
  • This would be my preferred way, but the minute can be “*” or “*/5” too, which would be missed by your expression. Commented Feb 9, 2012 at 8:56
  • @Balaswamyvaddeman note it's a big P , can you try again ? Commented Feb 9, 2012 at 9:08
  • actually it was my typo I tried big P only Commented Feb 9, 2012 at 9:35
  • 1
    @AaronLewis, either ^[\d*] or ^(\d|\*). As you wrote you allow the literal “|” character in the character class. But ^[0-9*] would be better, to get rid of the -P dependency. Commented Feb 9, 2012 at 9:39
0

after multiple attempts I have got below command.

crontab -l |sed -e '/#/d'|wc -l 

more on sed

more on wc

2
  • I believe that '/#/d' would remove valid lines that happen to have a comment at the end. Commented Feb 9, 2012 at 6:28
  • though my solution works for my requirement,urs is more solid Commented Feb 9, 2012 at 7:04
0

You could do:

PATH=`getconf PATH`:$PATH # needed on Solaris to get POSIX compliant versions # of the basic Unix utilities crontab -l | LC_ALL=C grep -c '^[[:blank:]]*[0-9@*]' 

That is count the lines that start with either ASCII decimal digits or * or @ (the latter not currently supported by Solaris cron but supported by a few other implementations) preceded by 0 or more blanks (in the C locale, that's either SPC or TAB).

You must log in to answer this question.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.