¿Cómo puedo reiniciar samba SÓLO cuando no se están transfiriendo ningún archivo?

¿Cómo puedo reiniciar samba SÓLO cuando no se están transfiriendo ningún archivo?

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 deadtimeconfiguración para eliminar smbdprocesos 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 smbdproceso principal, incluso mientras los procesos secundarios aún se están ejecutando).

información relacionada