• Hola Guest, Si quieres poner tu granito de arena para mantener el foro y colaborar económicamente con su mantenimiento.

    Puedes hacerlo aquí: https://www.lonasdigital.com/donaciones/


Fallo (rejected group (0 ms) - Liga (no matching reader)

Hola, retomo el post, alguien ha encontrado solucion a esto? A mí también me está pasando, al principio era de vez en cuando y de un tiempo hacia aquí es cada X horas.

Un saludo

¿En qué versión de NCam y para que arquitectura te está sucediendo esto?
 
¿En qué versión de NCam y para que arquitectura te está sucediendo esto?

Hola, gracias por tu respuesta!

estoy con la version de ncam Version NCAM: 6.6-r1 Build: 07-12-2022 Compiler: x86_64-linux-gnu-libusb-pcsc

los lectores que tengo son:
Bus 001 Device 002: ID 076b:3031 OmniKey AG 3x21 Smart Card Reader
Bus 001 Device 003: ID 076b:3031 OmniKey AG 3x21 Smart Card Reader

Tengo el pc con ncam en remoto por lo que la unica solucion que encuentro es reiniciarlo y ultimamente es varias veces al día.

Lo tenia con ubuntu 18 por lo que monte otro pc con ubuntu 24 por si era tema de la version, pero me sigue pasando.

he probado tambien con stop y start a pcsc y pcsc.socket y a veces los vuelve a detectar pero se quedan sin entitlements los 2 lectores.


Muchas gracias.
Saludos,


he hecho este script que si dectecta card unavaliable desconecta el puerto usb y lo vuelve a conectar, pero se quedan entitlements y añadi que parase y arrancase el servicio ncam pero tampoco consigo que vuelva a arrancar de nuevo

#!/bin/bash

# Archivo de log opcional
LOGFILE="/var/log/ncam_restart.log"

# Función para escribir en el log
log() {
echo "$(date '+%Y-%m-%d %H:%M:%S') - $1" | tee -a "$LOGFILE"
}

log "Verificando estado de las tarjetas en pcsc_scan..."

# Ejecutar pcsc_scan en segundo plano, capturar la salida y matarlo después de 5 segundos
OUTPUT=$(timeout 5s pcsc_scan)

# Comprobar si alguna tarjeta tiene "Card state: Status unavailable"
if echo "$OUTPUT" | grep -q "Card state: Status unavailable"; then
log "Al menos una tarjeta está en estado 'Status unavailable'. Reiniciando controlador USB..."

# Reiniciar el controlador USB
echo -n "0000:00:14.0" > /sys/bus/pci/drivers/xhci_hcd/unbind
sleep 5
echo -n "0000:00:14.0" > /sys/bus/pci/drivers/xhci_hcd/bind

log "Controlador USB reiniciado. Relanzando NCAM..."

# Detener NCAM si ya está en ejecución
pkill -f "ncam"

# Relanzar NCAM en segundo plano
ncam -b &

log "NCAM iniciado correctamente."
else
log "Todas las tarjetas están en estado normal. No se requiere reinicio."
fi

.
 
Hola, gracias por tu respuesta!

estoy con la version de ncam Version NCAM: 6.6-r1 Build: 07-12-2022 Compiler: x86_64-linux-gnu-libusb-pcsc

los lectores que tengo son:
Bus 001 Device 002: ID 076b:3031 OmniKey AG 3x21 Smart Card Reader
Bus 001 Device 003: ID 076b:3031 OmniKey AG 3x21 Smart Card Reader

Tengo el pc con ncam en remoto por lo que la unica solucion que encuentro es reiniciarlo y ultimamente es varias veces al día.

Lo tenia con ubuntu 18 por lo que monte otro pc con ubuntu 24 por si era tema de la version, pero me sigue pasando.

he probado tambien con stop y start a pcsc y pcsc.socket y a veces los vuelve a detectar pero se quedan sin entitlements los 2 lectores.


Muchas gracias.
Saludos,


he hecho este script que si dectecta card unavaliable desconecta el puerto usb y lo vuelve a conectar, pero se quedan entitlements y añadi que parase y arrancase el servicio ncam pero tampoco consigo que vuelva a arrancar de nuevo

#!/bin/bash

# Archivo de log opcional
LOGFILE="/var/log/ncam_restart.log"

# Función para escribir en el log
log() {
echo "$(date '+%Y-%m-%d %H:%M:%S') - $1" | tee -a "$LOGFILE"
}

log "Verificando estado de las tarjetas en pcsc_scan..."

# Ejecutar pcsc_scan en segundo plano, capturar la salida y matarlo después de 5 segundos
OUTPUT=$(timeout 5s pcsc_scan)

# Comprobar si alguna tarjeta tiene "Card state: Status unavailable"
if echo "$OUTPUT" | grep -q "Card state: Status unavailable"; then
log "Al menos una tarjeta está en estado 'Status unavailable'. Reiniciando controlador USB..."

# Reiniciar el controlador USB
echo -n "0000:00:14.0" > /sys/bus/pci/drivers/xhci_hcd/unbind
sleep 5
echo -n "0000:00:14.0" > /sys/bus/pci/drivers/xhci_hcd/bind

log "Controlador USB reiniciado. Relanzando NCAM..."

# Detener NCAM si ya está en ejecución
pkill -f "ncam"

# Relanzar NCAM en segundo plano
ncam -b &

log "NCAM iniciado correctamente."
else
log "Todas las tarjetas están en estado normal. No se requiere reinicio."
fi

.

¿Sabes si te pasa con otras versiones diferentes de NCam? el caso es que si fuera el lector interno de un receptor.... Pero al ser algo externo autoalimentado, puede ser que entre en estado de ahorro de energía, que se suspenda, etc... Lo único que se me ocurre es compilar las nuevas versiones con una versión superior de libusb y pcsc.

Te puedo mientras tanto intentar ajustar ese script para que almenos puedas ir tirando y que reinicie correctamente ncam, pero necesito saber la ruta en donde lo tienes puesto el binario, de todos modos, lo pondré como que está en /var/bin que donde se recomienda en servidores externos y ya tú la cambias.
 
Vamos por partes y espero no liarte mucho que voy medio cegato jeje

Lo primero es crear un script aparte que será el primero que deberá de iniciar siempre junto con NCam:
Yo lo suelo llamar ncamcpu.sh pero tú puedes llamarlo como quieras y dentro metes esto:

Bash:
#!/bin/sh

# Buscar procesos de NCam que superen el 80% de CPU
max_ncam=$(ps -C ncam -o user,pid,pcpu,pmem,vsz --no-headers | awk '{ if ( $3 > 80) print $2}')
if [ -z "$max_ncam" ]; then
    echo "ncam ok" #>> /tmp/killncam.log
    echo && date #>> /tmp/killncam.log
else
    echo && date #>> /tmp/killncam.log
    echo "$(date) - NCam consumiendo demasiada CPU. Reiniciándolo..." #>> /tmp/killncam.log
    echo "NCam killed"
    # Matar el script de comprobación si está en ejecución
    pkill -f "Comprobar_proceso.sh"
    # asugurarnos que se ha matado y si no lo está hacerlo.
    sleep 1
    kill -9 `ps ax | grep [C]omprobar_proceso.sh | grep -v grep | awk '{print $1}'` 2>/dev/null
    # Matar los procesos de NCam con alto consumo
    [ ! -z "$max_ncam" ] && kill -9 $max_ncam
fi
# Iniciar Comprobar_proceso.sh para asegurar que NCam sigue corriendo
sh /var/script/Comprobar_proceso.sh >> /dev/null 2>&1

exit 0

Ese script deberá de iniciar siempre en el script donde inicies ncam justo debajo de ncam -b le metes un sleep de 1/2 segunods y luego lo llamas o bien con sh /larutadondelopongas/ncamcpu.sh o bien con nohup sh /larutadondelopongas/ncamcpu.sh para que se ejecute siempre de fondo aparte sin afectar a nada.

Necesitas crear luego en /var/script/ un documento de texto que renombrarás a Comprobar_proceso.sh ya que en el anterior script si te fijas lo estamos invocando en diferentes circustancias y le darás permisos 755. Este le metes dentro este contenido y lo ajustas según tu ruta donde esté el binario y el nombre del mismo ¿ok?

Script Comprobar_proceso.sh:
Bash:
#!/bin/sh

PROCESO='ncam'
RUTA_PROCESO='/var/bin'
TIEMPO='15'
LOG=/tmp/test_$PROCESO.log
echo " ----- Iniciando test $PROCESO -----"
echo ''
echo ''
echo 'Vamos a comprobar el proceso activo'
echo ''
sleep 2
if pidof $PROCESO > /dev/null
then
echo ''
echo "$PROCESO activo"
else
echo "Alerta! $PROCESO detenido :( "
fi
date=`date`
echo "Iniciando test $PROCESO : $date" >> $LOG
while [ 1 ]
do
pidof $PROCESO > /dev/null
if [ $? -eq 0 ] ; then
echo 'Vamos a proceder a comprobar de nuevo el proceso activo'
echo ''
echo ""
else
date=`date`
echo "Reiniciando $PROCESO : $date" >> $LOG
echo ''
killall -9 $PROCESO
$RUTA_PROCESO/$PROCESO -b & 2>/dev/null
if [ $? -eq 0 ] ; then
echo "Ok! el servicio $PROCESO de nuevo operativo :) "
else
echo "Algo no ha funcionado. Por favor, intenta iniciarlo manualmente"
fi
fi
#Tiempo de comprobación si el servicio sigue activo, si no lo está se reicicia.
sleep $TIEMPO
done

exit 0

No te olvides de los permisos 755 con chmod 755 /var/script/* 2>/dev/null por ejemplo o a mano con el filezilla o el cliente ftp que uses o como más coraje te de.

Luego tu script lo cambias por este otro:
Bash:
#!/bin/bash

PROCESO='ncam'
RUTA_PROCESO='/var/bin'

echo 'Verificando estado de las tarjetas en pcsc_scan...'

# Ejecutar pcsc_scan en segundo plano, capturar la salida y matarlo después de 5 segundos
OUTPUT=$(timeout 5s pcsc_scan)

# Comprobar si alguna tarjeta tiene "Card state: Status unavailable"
if echo "$OUTPUT" | grep -q "Card state: Status unavailable"; then
    echo 'Al menos una tarjeta está en estado "Status unavailable". Reiniciando controlador USB...'

    # Reiniciar el controlador USB
    echo -n "0000:00:14.0" > /sys/bus/pci/drivers/xhci_hcd/unbind
    sleep 5
    echo -n "0000:00:14.0" > /sys/bus/pci/drivers/xhci_hcd/bind

    echo 'Controlador USB reiniciado. Esperando disponibilidad de tarjetas...'

    # Esperar a que las tarjetas estén disponibles (máx 30 segundos)
    for i in {1..30}; do
        OUTPUT=$(timeout 5s pcsc_scan)
        if ! echo "$OUTPUT" | grep -q "Card state: Status unavailable"; then
            echo "Tarjetas disponibles. Relanzando NCam..."
            break
        fi
        sleep 1
    done

    # Relanzar NCam usando el script de comprobación
    killall -9 $PROCESO
    $RUTA_PROCESO/$PROCESO -b & 2>/dev/null
    echo 'Ejecutando Comprobar_proceso.sh para mantener NCam activo...'
    sh /var/script/Comprobar_proceso.sh >> /dev/null 2>&1 &
else
    echo "Todas las tarjetas están en estado normal. No se requiere reinicio."
fi

exit 0

Ten en cuenta que en este último script, realmente la parte que dice:
echo 'Ejecutando Comprobar_proceso.sh para mantener NCam activo...'
sh /var/script/Comprobar_proceso.sh >> /dev/null 2>&1 &
No es necesaria si ya lo estás llamando en segundo plano con ncamcpu.sh porque si o sí el otro lo va a reiniciar solo, pero te lo dejo puesto para que vayas trasteando, pero mi consejo sería comentar estas dos líneas o eliminarlas para evitar problemas.

Yo personalmente crearía un script en /etc/init.d llamado ncam.sh y dentro pondría algo así:

Bash:
#!/bin/sh

# Iniciar NCam
echo 'Iniciando NCam...'
ncam -b &
sleep 2  # Dar tiempo a NCam para arrancar, lo puedes subir a 5 incluso.

# Ejecutar el script ncamcpu.sh para monitorear el uso de la CPU y reiniciar si es necesario
nohup sh /var/script/ncamcpu.sh &
# aquí debajo también puedes llamar al script que reinicia el lector con nohup si quieres...

exit 0

Se podría optimizar e incluso dejarlo todo en un solo script, pero no quiero liarte mucho más y entre la hora que es y que ya no veo un pijo lo mínimo que espero es que te funcione :ROFLMAO: que debe de hacerlo puesto que es tal cual lo he tenido yo durante años, aunque le he realizado algunos ajustes para intentar que lo comprendas, de todos modos mañana si puedo y endesa me lo permite como lo está haciendo sorprendentemente hoy, te lo puedo pulir y testear incluso antes.

Un saludo y buenas noches
 
Vamos por partes y espero no liarte mucho que voy medio cegato jeje

Lo primero es crear un script aparte que será el primero que deberá de iniciar siempre junto con NCam:
Yo lo suelo llamar ncamcpu.sh pero tú puedes llamarlo como quieras y dentro metes esto:

Bash:
#!/bin/sh

# Buscar procesos de NCam que superen el 80% de CPU
max_ncam=$(ps -C ncam -o user,pid,pcpu,pmem,vsz --no-headers | awk '{ if ( $3 > 80) print $2}')
if [ -z "$max_ncam" ]; then
    echo "ncam ok" #>> /tmp/killncam.log
    echo && date #>> /tmp/killncam.log
else
    echo && date #>> /tmp/killncam.log
    echo "$(date) - NCam consumiendo demasiada CPU. Reiniciándolo..." #>> /tmp/killncam.log
    echo "NCam killed"
    # Matar el script de comprobación si está en ejecución
    pkill -f "Comprobar_proceso.sh"
    # asugurarnos que se ha matado y si no lo está hacerlo.
    sleep 1
    kill -9 `ps ax | grep [C]omprobar_proceso.sh | grep -v grep | awk '{print $1}'` 2>/dev/null
    # Matar los procesos de NCam con alto consumo
    [ ! -z "$max_ncam" ] && kill -9 $max_ncam
fi
# Iniciar Comprobar_proceso.sh para asegurar que NCam sigue corriendo
sh /var/script/Comprobar_proceso.sh >> /dev/null 2>&1

exit 0

Ese script deberá de iniciar siempre en el script donde inicies ncam justo debajo de ncam -b le metes un sleep de 1/2 segunods y luego lo llamas o bien con sh /larutadondelopongas/ncamcpu.sh o bien con nohup sh /larutadondelopongas/ncamcpu.sh para que se ejecute siempre de fondo aparte sin afectar a nada.

Necesitas crear luego en /var/script/ un documento de texto que renombrarás a Comprobar_proceso.sh ya que en el anterior script si te fijas lo estamos invocando en diferentes circustancias y le darás permisos 755. Este le metes dentro este contenido y lo ajustas según tu ruta donde esté el binario y el nombre del mismo ¿ok?

Script Comprobar_proceso.sh:
Bash:
#!/bin/sh

PROCESO='ncam'
RUTA_PROCESO='/var/bin'
TIEMPO='15'
LOG=/tmp/test_$PROCESO.log
echo " ----- Iniciando test $PROCESO -----"
echo ''
echo ''
echo 'Vamos a comprobar el proceso activo'
echo ''
sleep 2
if pidof $PROCESO > /dev/null
then
echo ''
echo "$PROCESO activo"
else
echo "Alerta! $PROCESO detenido :( "
fi
date=`date`
echo "Iniciando test $PROCESO : $date" >> $LOG
while [ 1 ]
do
pidof $PROCESO > /dev/null
if [ $? -eq 0 ] ; then
echo 'Vamos a proceder a comprobar de nuevo el proceso activo'
echo ''
echo ""
else
date=`date`
echo "Reiniciando $PROCESO : $date" >> $LOG
echo ''
killall -9 $PROCESO
$RUTA_PROCESO/$PROCESO -b & 2>/dev/null
if [ $? -eq 0 ] ; then
echo "Ok! el servicio $PROCESO de nuevo operativo :) "
else
echo "Algo no ha funcionado. Por favor, intenta iniciarlo manualmente"
fi
fi
#Tiempo de comprobación si el servicio sigue activo, si no lo está se reicicia.
sleep $TIEMPO
done

exit 0

No te olvides de los permisos 755 con chmod 755 /var/script/* 2>/dev/null por ejemplo o a mano con el filezilla o el cliente ftp que uses o como más coraje te de.

Luego tu script lo cambias por este otro:
Bash:
#!/bin/bash

PROCESO='ncam'
RUTA_PROCESO='/var/bin'

echo 'Verificando estado de las tarjetas en pcsc_scan...'

# Ejecutar pcsc_scan en segundo plano, capturar la salida y matarlo después de 5 segundos
OUTPUT=$(timeout 5s pcsc_scan)

# Comprobar si alguna tarjeta tiene "Card state: Status unavailable"
if echo "$OUTPUT" | grep -q "Card state: Status unavailable"; then
    echo 'Al menos una tarjeta está en estado "Status unavailable". Reiniciando controlador USB...'

    # Reiniciar el controlador USB
    echo -n "0000:00:14.0" > /sys/bus/pci/drivers/xhci_hcd/unbind
    sleep 5
    echo -n "0000:00:14.0" > /sys/bus/pci/drivers/xhci_hcd/bind

    echo 'Controlador USB reiniciado. Esperando disponibilidad de tarjetas...'

    # Esperar a que las tarjetas estén disponibles (máx 30 segundos)
    for i in {1..30}; do
        OUTPUT=$(timeout 5s pcsc_scan)
        if ! echo "$OUTPUT" | grep -q "Card state: Status unavailable"; then
            echo "Tarjetas disponibles. Relanzando NCam..."
            break
        fi
        sleep 1
    done

    # Relanzar NCam usando el script de comprobación
    killall -9 $PROCESO
    $RUTA_PROCESO/$PROCESO -b & 2>/dev/null
    echo 'Ejecutando Comprobar_proceso.sh para mantener NCam activo...'
    sh /var/script/Comprobar_proceso.sh >> /dev/null 2>&1 &
else
    echo "Todas las tarjetas están en estado normal. No se requiere reinicio."
fi

exit 0

Ten en cuenta que en este último script, realmente la parte que dice:
echo 'Ejecutando Comprobar_proceso.sh para mantener NCam activo...'
sh /var/script/Comprobar_proceso.sh >> /dev/null 2>&1 &
No es necesaria si ya lo estás llamando en segundo plano con ncamcpu.sh porque si o sí el otro lo va a reiniciar solo, pero te lo dejo puesto para que vayas trasteando, pero mi consejo sería comentar estas dos líneas o eliminarlas para evitar problemas.

Yo personalmente crearía un script en /etc/init.d llamado ncam.sh y dentro pondría algo así:

Bash:
#!/bin/sh

# Iniciar NCam
echo 'Iniciando NCam...'
ncam -b &
sleep 2  # Dar tiempo a NCam para arrancar, lo puedes subir a 5 incluso.

# Ejecutar el script ncamcpu.sh para monitorear el uso de la CPU y reiniciar si es necesario
nohup sh /var/script/ncamcpu.sh &
# aquí debajo también puedes llamar al script que reinicia el lector con nohup si quieres...

exit 0

Se podría optimizar e incluso dejarlo todo en un solo script, pero no quiero liarte mucho más y entre la hora que es y que ya no veo un pijo lo mínimo que espero es que te funcione :ROFLMAO: que debe de hacerlo puesto que es tal cual lo he tenido yo durante años, aunque le he realizado algunos ajustes para intentar que lo comprendas, de todos modos mañana si puedo y endesa me lo permite como lo está haciendo sorprendentemente hoy, te lo puedo pulir y testear incluso antes.

Un saludo y buenas noches

Mil gracias por el currazo.

Mañana a la mañana lo encajo todo con las rutas que tengo y lo arranco, te voy contando.
 
Mil gracias por el currazo.

Mañana a la mañana lo encajo todo con las rutas que tengo y lo arranco, te voy contando.

Hola, conseguiste solucionarlo?, yo sigo detras del fallo que hay veces que se tira dias sin fallar y otras que en un fin de semana falla varias veces
 
Hola, conseguiste solucionarlo?, yo sigo detras del fallo que hay veces que se tira dias sin fallar y otras que en un fin de semana falla varias veces

Buenas, al final cambie los lectores omnikey por otros por que era un infierno con pcsc, ni compilando la ultima version en la propia maquina había manera.

Saludos.
 

Create an account or login to comment

You must be a member in order to leave a comment

Create account

Create an account on our community. It's easy!

Log in

Already have an account? Log in here.

Activity
So far there's no one here
Back
Top