[Admin-ml] launchd me rend dingue

Proniewski Patrick patrick.proniewski at univ-lyon2.fr
Mar 19 Mai 17:38:06 CEST 2009


Bonjour,

Je suis (toujours...) en train de monter un MX en 10.5 pour renouveler  
notre machine en 10.4, et je me bats avec ce c0n de launchd qui ne  
veut rien faire comme tout le monde.

but de la manip : lancer freshclam en StartInterval ou  
StartCalendarInterval.

Comme freshclam ne retourne un status 0 que si il met à jour les  
définitions de virus avec succès, il est impossible d'utiliser launchd  
directement pour lancer freshclam "à la crontab".
En effet, si les définitions de virus sont à jour, alors freshclam  
renvoie un status 1, et launchd prend ça pour une erreur, il relance  
le process 10 secondes plus tard, avec le même résultat, bien sûr.

Pour contourner cela, j'ai fait un wrapper en shell, que j'invoque via  
ce plist :

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd 
">
<plist version="1.0">
<dict>
	<key>Label</key>
	<string>org.clamav.freshclam</string>
	<key>OnDemand</key>
	<false/>
	<key>ProgramArguments</key>
	<array>
		<string>/opt/local/bin/freshclam_wrapper.sh</string>
	</array>
         <key>StartInterval</key>
         <integer>3600</integer>
	<key>UserName</key>
	<string>_clamav</string>
	<key>StandardErrorPath</key>
	<string>/tmp/launchdfreshclam.err</string>
</dict>
</plist>

le wrapper en shell :

#!/bin/bash
# $Id: freshclam_wrapper.sh 1607 2009-05-19 14:17:26Z patpro $
#
# version initiale : Patrick Proniewski
#
MESSAGE=$(/opt/local/bin/freshclam 2>&1)
SORTIE=$?
TRIGMAIL=0

case ${SORTIE} in
	"0")	LOG="Database successfully updated."; TRIGMAIL=1 ;;
	"1")	LOG="Database is up-to-date."; TRIGMAIL=1 ;;
	"40")	LOG="Unknown option passed." ;;
	"50")	LOG="Can't change directory." ;;
	"51")	LOG="Can't check MD5 sum." ;;
	"52")	LOG="Connection (network) problem." ;;
	"53")	LOG="Can't unlink file." ;;
	"54")	LOG="MD5 or digital signature verification error." ;;
	"55")	LOG="Error reading file." ;;
	"56")	LOG="Config file error." ;;
	"57")	LOG="Can't create new file." ;;
	"58")	LOG="Can't read database from remote server." ;;
	"59")	LOG="Mirrors are not fully synchronized (try again later)." ;;
	"60")	LOG="Can't get information about '_clamav' user from /etc/ 
passwd." ;;
	"61")	LOG="Can't drop privileges." ;;	
	"62")	LOG="Can't initialize logger." ;;
	*)	LOG="HORS CHAMPS" ;;
esac

if [ $TRIGMAIL -eq 0 ]; then
	echo "${MESSAGE}" | mail -s "Freshclam : ${LOG}" postmaster
#else
#	echo "${MESSAGE}"
fi

sleep 1
exit 0

J'ai beau tourner autour de toutes les manières qui me viennent à  
l'esprit, impossible de faire accepter mon wrapper à launchd.
Ce dernier me fait une erreur :
	com.apple.launchd[1] (org.clamav.freshclam): Throttling respawn: Will  
start in 9 seconds
et donc toutes les 10 secondes mon wrapper est relancé :
	freshclam[44168]: ClamAV update process started at Tue May 19  
17:17:48 2009
	freshclam[44168]: main.cld is up to date (version: 51, sigs: 545035,  
f-level: 42, builder: sven)
	freshclam[44168]: daily.cld is up to date (version: 9372, sigs: 5689,  
f-level: 42, builder: ccordes)

J'en ai fait d'autres des wrappers, des plist launchd qui lancent des  
scripts shell... Je n'ai jamais eu autant de problèmes. Je deviens  
maboul.
Et pour tout arranger, /tmp/launchdfreshclam.err reste vide. Donc  
impossible d'en savoir plus

Patrick PRONIEWSKI
-- 
Administrateur Système - SENTIER - Université Lumière Lyon 2




Plus d'informations sur la liste de diffusion Admin-ml