Я настроил службу linux (CentOS) для запуска скрипта, который запускается в backgroud (daemon /home/user/testftp.sh &
) или в контексте службы start и stop:
# Source function library.
. /etc/init.d/functions
prog=ftpmonitor
lockfile=/var/lock/subsys/ftpmonitor
start() {
[ "$EUID" != "0" ] && exit 4
# Start daemons.
echo -n $"Starting $prog: "
daemon /home/user/testftp.sh &
PID1=$!
#echo "$PID1"
RETVAL=$?
echo
[ $RETVAL -eq 0 ] && touch $lockfile
return $RETVAL
}
stop() {
[ "$EUID" != "0" ] && exit 4
echo -n $"Shutting down $prog: "
killproc $prog
kill $PID1
RETVAL=$?
echo
[ $RETVAL -eq 0 ] && rm -f $lockfile
return $RETVAL
}
Моя проблема - остановить все процессы. killproc $prog
остановит службу, но фоновый процесс все еще работает (testftp.sh
), который необходимо запустить в фоновом режиме для мониторинга журналов ftp).
Я видел похожие посты, в которых говорится, что нужно использовать PID1=$!
который будет представлять PID для testftp.sh
. Но PID, похоже, просто сервисный ftpmonitor
. Поэтому очевидно, что моя команда stop service с kill $PID1
не будет работать.
РЕДАКТИРОВАТЬ:
скрипт testftp.sh
#!/bin/sh
sudo tail -F /var/log/vsftpd.log | while read line; do
if sudo echo "$line" | grep -q 'OK UPLOAD:'; then
username=$(echo "$line" | cut -d" " -f8 | sed 's/\[\(.*\)\]/\1/')
filename=$(echo "$line" | cut -d, -f2 | sed 's/^[ \t]*//' | tr -d '"')
home="/home/vsftpd/$username"
if sudo ls "$home$filename" &> /dev/null; then
# do something with $filename
echo "$home$filename is the file to be proccesed"
fi
fi
done