Package: debian-goodies
Version: 0.59
Severity: wishlist
Tags: patch
It would be useful if checkrestart had the ability to add more blacklist
patterns. The attached patch adds a -b parameter which does this.
--
Tollef Fog Heen
UNIX is user friendly, it's just picky about who its friends are
diff -Nur debian-goodies-0.59/checkrestart ../debian-goodies-0.59/checkrestart
--- debian-goodies-0.59/checkrestart 2011-10-25 00:17:42.000000000 +0200
+++ ../debian-goodies-0.59/checkrestart 2011-11-18 12:49:41.030287448 +0100
@@ -68,11 +68,12 @@
lc_all_c_env = os.environ
lc_all_c_env['LC_ALL'] = 'C'
-
+ blacklistFiles = []
+ blacklist = []
# Process options
try:
- opts, args = getopt.getopt(sys.argv[1:], "hvpa", ["help", "verbose", "packages", "all"])
+ opts, args = getopt.getopt(sys.argv[1:], "hvpab:", ["help", "verbose", "packages", "all", "blacklist"])
except getopt.GetoptError, err:
# print help information and exit:
print str(err) # will print something like "option -x not recognized"
@@ -98,9 +99,18 @@
elif o in ("-a", "--all"):
allFiles = True
onlyPackageFiles = False
+ elif o in ("-b", "--blacklist"):
+ blacklistFiles.append(a)
+ onlyPackageFiles = False
else:
assert False, "unhandled option"
+ for f in blacklistFiles:
+ for line in file(f, "r"):
+ if line.startswith("#"):
+ continue
+ blacklist.append(re.compile(line.strip()))
+
# Start checking
if find_cmd('lsof') == 1:
@@ -114,7 +124,7 @@
# TODO - This does not work yet:
# toRestart = psdelcheck()
- toRestart = lsofcheck()
+ toRestart = lsofcheck(blacklist = blacklist)
print "Found %d processes using old versions of upgraded files" % len(toRestart)
@@ -226,7 +236,7 @@
for process in package.processes:
print "\t%s\t%s" % (process.pid,process.program)
-def lsofcheck():
+def lsofcheck(blacklist = None):
processes = {}
for line in os.popen('lsof +XL -F nf').readlines():
@@ -254,7 +264,7 @@
# Save the descriptor for later comparison
process.descriptors.append(data)
- toRestart = filter(lambda process: process.needsRestart(),
+ toRestart = filter(lambda process: process.needsRestart(blacklist),
processes.values())
return toRestart
@@ -262,12 +272,16 @@
# Returns:
# - 0 (NO) for known locations of files which might be deleted
# - 1 (YES) for valid deleted files we are interested in
-def isdeletedFile (f):
+def isdeletedFile (f, blacklist = None):
global lc_all_c_env
if allFiles:
return 1
+ if blacklist:
+ for p in blacklist:
+ if p.search(f):
+ return 0
# We don't care about log files
if f.startswith('/var/log/'):
return 0
@@ -466,9 +480,9 @@
# Returns:
# - 0 if there is no need to restart the process
# - 1 if the process needs to be restarted
- def needsRestart(self):
+ def needsRestart(self, blacklist = None):
for f in self.files:
- if isdeletedFile(f):
+ if isdeletedFile(f, blacklist):
return 1
for f in self.links:
if f == 0:
diff -Nur debian-goodies-0.59/checkrestart.1 ../debian-goodies-0.59/checkrestart.1
--- debian-goodies-0.59/checkrestart.1 2011-10-09 23:06:17.000000000 +0200
+++ ../debian-goodies-0.59/checkrestart.1 2011-11-18 13:01:28.609617122 +0100
@@ -57,6 +57,12 @@
.I -p
option.
+.TP
+.BI -b file, --blacklist=file
+Read a blacklist of regular expressions from
+.I file.
+Any files matching the patterns will be ignored.
+
.SH EXIT STATUS
The program will exit with error (1) if a non-root user tries to run it. Otherwise,