Below is a test script to illustrate a problem from a larger script I am writing.
$ cat /tmp/loggingtest
#!/bin/bash
lvcreate -s -l 100%FREE -n var-data-snapshot vg00/var-data 2> >(logger -t "loggingtest.crit") 1> >(logger -t "loggingtest.info")
sync &
wait
lvremove -f vg00/var-data-snapshot 2> >(logger -t "loggingtest.crit") 1> >(logger -t "loggingtest.info")
When I run this I receive the following output in /var/log/syslog.
Specifically I cannot understand where the "File descriptor 62 left open" and "File descriptor 63 left open" errors are coming from. Also the script hangs until I press enter.
Sep 12 11:57:39 debvelopment loggingtest.crit: File descriptor 62 left open
Sep 12 11:57:39 debvelopment loggingtest.crit: File descriptor 63 left open
Sep 12 11:57:39 debvelopment loggingtest.info: Logical volume "var-data-snapshot" created
Sep 12 11:57:39 debvelopment loggingtest.crit: File descriptor 62 left open
Sep 12 11:57:39 debvelopment loggingtest.crit: File descriptor 63 left open
Sep 12 11:57:39 debvelopment loggingtest.info: Logical volume "var-data-snapshot" successfully removed
I have done research but I am finding it difficult to understand whether these errors are related to lvm, syslog or something I am doing wrong in bash? let alone how to close the file descriptors properly.
---------- Post updated at 06:12 PM ---------- Previous update was at 12:01 PM ----------
I can now prevent the errors and know that the descriptors are from "logger" but I still do not understand it.
I added "62>&- 63>&-" to the end of each command and this resolves the errors e.g.
#!/bin/bash
lvcreate -s -l 100%FREE -n var-data-snapshot vg00/var-data 2> >(logger -t "loggingtest.crit") 1> >(logger -t "loggingtest.info") 62>&- 63>&-
sync &
wait
lvremove -f vg00/var-data-snapshot 2> >(logger -t "loggingtest.crit") 1> >(logger -t "loggingtest.info") 62>&- 63>&-
But what if the file descriptors where to change? How can I identify the relevant file descriptors and then close them? Do I need to even be concerned as they appear to close anyway?
Thanks