Ludovic Rousseau wrote on 06/04/2020:
> Le 05/04/2020 à 16:40, Paride Legovini a écrit :
>> Hello Ludovic,
>>
>> On Fri, 3 Apr 2020 15:37:20 +0200 Ludovic Rousseau
>> <ludovic.rouss...@free.fr> wrote:
> 
>>> When it fails:
>>> - is the socket /var/run/pcscd/pcscd.comm still present?
>>
>> This was a hint in the right direction and I think it makes most of the
>> logs I collected useless. Apparently when the problem occurs the
>> /var/run/pcscd/pcscd.comm socket is not there anymore, but systemd still
>> have a file descriptor open for it, as I found out using lsof:
>>
>> COMMAND  PID  TID TASKCMD  USER  FD   TYPE             DEVICE 
>> SIZE/OFF     NODE NAME
>> systemd    1               root  45u  unix 0xffffa066a5154400      
>> 0t0  3172053 /run/pcscd/pcscd.comm type=STREAM
>>
>> I think the systemd socket unit (pcscd.socket) does not recreate the
>> socket because of this, and passes a "dead" file descriptor to pcscd.
>> What exactly deletes the pcscd.comm socket is not clear to me. Now after
>> fiddling with pcscd I don't think I have clean logs to provide, I prefer
>> to wait for the problem to happen again and then check if anything
>> relevant is logged. I did try to suspend/resume a few times but but I
>> didn't manage to reproduce the issue. But maybe you know what could be
>> deleting the socket.
> 
> pcscd can remove the /var/run/pcscd/pcscd.comm socket but only when NOT
> started by systemd. This is done on init and exit of pcscd.
> When pcscd is started by systemd you have a log message like:
> Apr 03 12:51:52 stramonio pcscd[98472]: 00000032 pcscdaemon.c:451:main()
> Started by systemd
> 
> Maybe, sometimes, pcscd does not detect it is started by systemd. But in
> this case the socket should be re-created by pcscd so that should not be
> the correct explanation.
> 
> Or maybe the problem is on the systemd side?
> 
> You can continue generating logs. They are a good indication of what is
> happening.
> You can limit logs to the info level using --info instead of --debug.
> You can also remove the --apdu argument.
> 
> If I read correctly your previous message you have logs with:
> - pcscd is started by systemd
> - pcscd correctly indicates "Started by systemd"
> - but the communication is broken (pcsc_scan fails) and I guess the file
> /var/run/pcscd/pcscd.comm is missing
> - you stop pcscd: systemctl stop pcscd
> - you start pcscd: systemctl start pcscd
> - pcscd correctly indicates "Started by systemd"
> - the communication is still broken and, I guess, the file
> /var/run/pcscd/pcscd.comm is still missing

All correct, this fits what I observe and I think it is what is
happening, but before digging more I want to collect some cleaner logs,
just to be sure. While trying to debug this I tried different things,
including starting pcscd manually (outside systemd), so my logs are
dirty now, and I don't want to lose time on a red herring.

> To re-create the file /var/run/pcscd/pcscd.comm you need to use:
> systemctl stop pcscd.socket
> systemctl start pcscd.socket

Correct.

> See also
> https://ludovicrousseau.blogspot.com/2011/11/pcscd-auto-start-using-systemd.html
> 
> 
> I still have no clue when and why the socket file is removed.

Thanks, all useful information. I'll keep the service running with
--info and try to understand what happens when the socket is lost.

Paride

Reply via email to