Shell: Parameter -z in sed erzeugt Fehler in Cronjob

GwenDragon

Registered User
Ein PHP 5.4 sessionclean hat leider einen Parameter -z, den sed 4.2.1 (Debian 7) nicht kennt.
Das bedeutet natürlich, dass der täglich cronjob nicht korrekt läuft (was zu fixen wäre).

Ich habe mich doof gesucht im Web. In keiner man page steht -z drin. :eek:

Code:
#!/bin/sh

# first find all used files and touch them (hope it's not massive amount of files)
[ -x /usr/bin/lsof ] && /usr/bin/lsof -w -l +d "${1}" -F0 | sed -zne "s/^n//p" | xargs -0i echo touch -c -h "'{}'"

# find all files older then maxlifetime
find "${1}" -depth -mindepth 1 -maxdepth 1 -ignore_readdir_race -type f -cmin "+${2}" -delete

Im Cronjob sieht der Aufruf eigentlich so aus:
sessionclean /var/lib/php5 24

Wieso muss bei mit lsof gefundenen Dateinamen ein n am Zeilenanfang gelöscht werden? Ich dachte in /var/lib/php5 wären nur Dateien nach dem Muster PHPSESSID.....?
Was bedeutet -z?
Weiß jemand Abhilfe?

Danke für eure Hilfe.
 
Last edited by a moderator:
Wie schon gesagt, bekannter Bug in debian und ein Update wird wohl bald folgen. Btw, -z gibt es, allerdings nur in einer neueren Version:

Code:
       -z, --null-data

              separate lines by NUL characters
 
Ging sehr fix für Debian, wo es doch kein Security-Patch war.

sessionclean jetzt:
Code:
#!/bin/sh

# first find all used files and touch them (hope it's not massive amount of files)
[ -x /usr/bin/lsof ] && /usr/bin/lsof -w -l +d "${1}" | awk -- '{ if (NR > 1) { print $9; } }' | xargs -i touch -c {}

# find all files older then maxlifetime
find "${1}" -depth -mindepth 1 -maxdepth 1 -ignore_readdir_race -type f -cmin "+${2}" -delete
 
Back
Top