File: init

package info (click to toggle)
logwatch 7.14-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 3,572 kB
  • sloc: perl: 8,290; sh: 354; makefile: 38
file content (123 lines) | stat: -rw-r--r-- 3,985 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123

########################################################
# Please file all bug reports, patches, and feature
# requests under:
#      https://sourceforge.net/p/logwatch/_list/tickets
# Help requests and discusion can be filed under:
#      https://sourceforge.net/p/logwatch/discussion/
########################################################

#####################################################
## Copyright (c) 2008 Kirk Bauer
## Covered under the included MIT/X-Consortium License:
##    http://www.opensource.org/licenses/mit-license.php
## All modifications and contributions by other persons to
## this script are assumed to have been donated to the
## Logwatch project and thus assume the above copyright
## and licensing terms.  If you want to make contributions
## under your own copyright or a different license this
## must be explicitly stated in the contribution an the
## Logwatch project reserves the right to not accept such
## contributions.  If you have made significant
## contributions to this script and want to claim
## copyright please contact logwatch-devel@lists.sourceforge.net.
#########################################################
use strict;

my $Detail = $ENV{'LOGWATCH_DETAIL_LEVEL'} || 0;

#Init Counters
my $ReExecInit=     my$ReExecSbinInit=
0;
#Init String Containers
my (
$Cause,     $Name,      $Status,
);
#Init Array
my @OtherList = ();
#Init Hashes
my (
%ProcessKilled,     %ProcessTerminated,     %RunLevel
);

while (defined(my $ThisLine = <STDIN>)) {
   if (( $ThisLine =~ /open\(.*\): No such file or directory/)  or
      ( $ThisLine =~ /Id "r" respawning too fast: disabled for 5 minutes/) or
      ( $ThisLine =~ /Re-reading inittab/) or
      ( $ThisLine =~ /.* main process ended, respawning/) or
      ( $ThisLine =~ /Disconnected from system bus/)) {
      # We don't care about these
   }
   elsif ( $ThisLine =~ s/Switching to runlevel: (.)\s*$/$1/ ) {
      # Which runlevel did we change to?
      chomp ($ThisLine);
      $RunLevel{$ThisLine}++;
   }
   elsif ( $ThisLine =~ s/^Entering runlevel: (.)\s*$/$1/ ) {
      # Which runlevel did we enter?
      chomp ($ThisLine);
      $RunLevel{$ThisLine}++;
   }
   elsif ( $ThisLine =~ s/^Trying to re-exec init// ) {
	   # Look for telinit executions
	   chomp ($ThisLine);
	   $ReExecInit++;
   }
   elsif ( ($Name,$Cause) = ($ThisLine =~ /(.*) main process \([0-9]*\) killed by (.*)/)) {
      $ProcessKilled{"$Name,$Cause"}++;
   }
   elsif ( ($Name, $Status) = ($ThisLine =~ /(.*) main process \([0-9]*\) terminated with status ([0-9]*)/)) {
      $ProcessTerminated{"$Name,Status"}++;
   }
   elsif ( $ThisLine =~ /Re-executing \/sbin\/init/) {
      $ReExecSbinInit++;
   }
   else {
      # report any unmatched entries
      push @OtherList,$ThisLine;
   }
}

if ((keys %RunLevel) and ($Detail >= 10)) {
   foreach my $Level (sort keys %RunLevel) {
      print "   Entered or switched to runlevel " . $Level . ": " . $RunLevel{$Level} . " Time(s)\n";
   }
}

if ($ReExecInit and $Detail) {
	print "\n\nRe-execs of init: $ReExecInit times\n";
}

if ($ReExecSbinInit and $Detail) {
        print "\n\nRe-executing \/sbin\/init/: $ReExecSbinInit times\n";
}

if ((keys %ProcessKilled) and ($Detail >=10)) {
   print "\nKilled processses:\n";
   foreach (keys %ProcessKilled) {
      my ($Name,$Cause)=split ",";
      print "   Process " . $Name. " killed by " . $Cause . ": " . $ProcessKilled{"$Name,$Cause"} . " Time(s)\n";
   }
}

if ((keys %ProcessTerminated) and ($Detail >=10)) {
   print "\nTerminated processses:\n";
   foreach (keys %ProcessTerminated) {
      my ($Name,$Status)=split ",";
      print "   Process " . $Name. " terminated with status " . $Status . ": " . $ProcessTerminated{"$Name,$Status"} . " Time(s)\n";
   }
}

if ($#OtherList >= 0) {
   print "\n**Unmatched Entries**\n";
   print @OtherList;
}

exit(0);

# vi: shiftwidth=3 tabstop=3 syntax=perl et
# Local Variables:
# mode: perl
# perl-indent-level: 3
# indent-tabs-mode: nil
# End: