Estoy tratando de encontrar una manera de hacer esto. En este momento tengo un script que solo permitirá restablecer samba ejecutando "smbstatus", pero no es muy confiable (muestra archivos bloqueados cuando un cliente de Windows ha asignado un recurso compartido, sin actividad de archivos).
¿Hay alguna forma de detectar cuándo se están transfiriendo archivos a Samba?
NOTA: Solo transferencias de archivos activas, no clientes asignados
EDITAR: Así es como se ve mi script
until sudo smbstatus | grep "No locked files"
do
echo "Processes Running..."
sleep 5
echo ""
done
sudo service smbd restart
echo "Restarted SMB"
Respuesta1
Es posible que desee utilizar la deadtime
configuración para eliminar smbd
procesos secundarios que no se utilizan activamente.
Ejemplo, que mata un proceso hijo después de que no se haya utilizado durante 10 minutos:
deadtime = 10
La documentación señala, entre otras cosas, que
El tiempo muerto solo tiene efecto si el número de archivos abiertos es cero.
La mayoría de los clientes tienen una función de reconexión automática cuando se interrumpe una conexión, por lo que en la mayoría de los casos este parámetro debería ser transparente para los usuarios.
Se recomienda utilizar este parámetro con un tiempo de espera de unos minutos para la mayoría de los sistemas.
Con este esquema, puede contar la cantidad de procesos secundarios y realizar el reinicio cuando solo quede el proceso principal. (Eso sí, puede que sea suerte, pero recientemente no he tenido ningún problema al reiniciar el smbd
proceso principal, incluso mientras los procesos secundarios aún se están ejecutando).