Re: Defunct daemons, posted by Konstantin Olchanski on Wed Nov 12 03:48:29 2014
|
> Also see this in ALPHA at CERN.
> The elogd we use is this: https://bitbucket.org/ritt/elog/commits/44800a769b99599db7620779e2142b1161c694fc?at=master
Okey, found it. waitpid() in my_shell() is not protected against the periodic alarm signal. (UNIX signals are evil).
In the following log file, notice the entries that have "wait_status" of "-1". Those would have generated zombies ("defunct" processes).
Nov 12 03:43:05 alphacpc05 elogd[4809]: WAITPID pid 4873, wait_status 4873, errno 2 (No such file or directory), status 0, command "convert
'/home/alpha/online/elog/logbooks/test/141112_034304_xvthr04.pdf[0-7]' -thumbnail '600' '/home/alpha/online/elog/logbooks/test/141112_034304_xvthr04-%d.png'"
Nov 12 03:43:05 alphacpc05 elogd[4809]: WAITPID pid 4880, wait_status 4880, errno 2 (No such file or directory), status 0, command "identify -format '%wx%h'
'/home/alpha/online/elog/logbooks/test/141112_034304_xvthr04.pdf[0]'"
Nov 12 03:43:19 alphacpc05 elogd[4809]: WAITPID pid 4890, wait_status 4890, errno 2 (No such file or directory), status 0, command "identify -format '%wx%h'
'/home/alpha/online/elog/logbooks/test/141112_034304_xvthr04.pdf[0]'"
Nov 12 03:43:19 alphacpc05 elogd[4809]: WAITPID pid 4896, wait_status -1, errno 4 (Interrupted system call), status 0, command "convert
'/home/alpha/online/elog/logbooks/test/141112_034318_xvthr05.pdf[0-7]' -thumbnail '600' '/home/alpha/online/elog/logbooks/test/141112_034318_xvthr05-%d.png'"
Nov 12 03:43:19 alphacpc05 elogd[4809]: WAITPID pid 4896, wait_status 4896, errno 4 (Interrupted system call), status 0, command "convert
'/home/alpha/online/elog/logbooks/test/141112_034318_xvthr05.pdf[0-7]' -thumbnail '600' '/home/alpha/online/elog/logbooks/test/141112_034318_xvthr05-%d.png'"
Nov 12 03:43:20 alphacpc05 elogd[4809]: WAITPID pid 4904, wait_status 4904, errno 4 (Interrupted system call), status 0, command "identify -format '%wx%h'
'/home/alpha/online/elog/logbooks/test/141112_034318_xvthr05.pdf[0]'"
Nov 12 03:43:48 alphacpc05 elogd[4809]: WAITPID pid 4922, wait_status 4922, errno 2 (No such file or directory), status 0, command "identify -format '%wx%h'
'/home/alpha/online/elog/logbooks/test/141112_034304_xvthr04.pdf[0]'"
Nov 12 03:43:49 alphacpc05 elogd[4809]: WAITPID pid 4929, wait_status -1, errno 4 (Interrupted system call), status 1302603136, command "identify -format '%wx%h'
'/home/alpha/online/elog/logbooks/test/141112_034318_xvthr05.pdf[0]'"
Nov 12 03:43:49 alphacpc05 elogd[4809]: WAITPID pid 4929, wait_status 4929, errno 4 (Interrupted system call), status 0, command "identify -format '%wx%h'
'/home/alpha/online/elog/logbooks/test/141112_034318_xvthr05.pdf[0]'"
Nov 12 03:43:50 alphacpc05 elogd[4809]: WAITPID pid 4935, wait_status 4935, errno 2 (No such file or directory), status 0, command "convert
'/home/alpha/online/elog/logbooks/test/141112_034348_xvthr06.pdf[0-7]' -thumbnail '600' '/home/alpha/online/elog/logbooks/test/141112_034348_xvthr06-%d.png'"
Nov 12 03:43:50 alphacpc05 elogd[4809]: WAITPID pid 4943, wait_status 4943, errno 2 (No such file or directory), status 0, command "identify -format '%wx%h'
'/home/alpha/online/elog/logbooks/test/141112_034348_xvthr06.pdf[0]'"
The following code is verified to not generate zombies, please apply it to the master branch of elog:
alphadaq.cern.ch:~/packages/elog> git diff
diff --git a/src/elogd.c b/src/elogd.c
index 277ba30..2d9a848 100755
--- a/src/elogd.c
+++ b/src/elogd.c
@@ -892,14 +892,25 @@ int my_shell(char *cmd, char *result, int size)
#ifdef OS_UNIX
pid_t child_pid;
- int fh, status, i;
+ int fh, status, i, wait_status;
char str[1024];
if ((child_pid = fork()) < 0)
return 0;
else if (child_pid > 0) {
/* parent process waits for child */
- waitpid(child_pid, &status, 0);
+
+ while (1) {
+ wait_status = waitpid(child_pid, &status, 0);
+
+ sprintf(str, "WAITPID pid %d, wait_status %d, errno %d (%s), status %d, command \"%s\"", child_pid, wait_status, errno, strerror(errno), status, cmd);
+ write_logfile(NULL, str);
+ eprintf("%s", str);
+
+ if (wait_status == -1 && errno == EINTR)
+ continue;
+ break;
+ }
/* read back result */
memset(result, 0, size);
diff --git a/src/git-revision.h b/src/git-revision.h
K.O. |
Re: Defunct daemons, posted by Stefan Ritt on Mon Nov 24 13:24:27 2014
|
> Okey, found it. waitpid() in my_shell() is not protected against the periodic alarm signal. (UNIX signals are evil).
Acknowledged. Thanks for the fix. I added it to the development branch.
/Stefan |
Strange Behavior in "Find" Function, posted by Eric Quintero on Tue Dec 16 01:15:40 2014
|
Hi all,
We've been happily using ELOG for years, but ran into an odd problem when replacing the old Solaris server that ran the ELOG with a newer box running Ubuntu.
Basically, when I try to search the log, the URL seems to be malformed. I.e. the form produces the query string:
?mode=summvry&reverse=0&reverse=1&npp=35&m&y&Authorthor=ericq
Instead of a functional one like:
?mode=summary&reverse=1&npp=35&Author=ericq
We're running v2.8.1, since we like using the global write password mode; our log is viewable here: http://nodus.ligo.caltech.edu:8080 Any ideas what could've gone wrong? Installation was pretty straightforward, the code compiled happily on the ubuntu machine.
Incidentally, I notice this logbook is running V3, using CKeditor. Any hints when these might be available for public use?
Thanks! |
Re: Strange Behavior in "Find" Function, posted by Stefan Ritt on Wed Dec 17 14:40:19 2014
|
Eric Quintero wrote: |
Hi all,
We've been happily using ELOG for years, but ran into an odd problem when replacing the old Solaris server that ran the ELOG with a newer box running Ubuntu.
Basically, when I try to search the log, the URL seems to be malformed. I.e. the form produces the query string:
?mode=summvry&reverse=0&reverse=1&npp=35&m&y&Authorthor=ericq
Instead of a functional one like:
?mode=summary&reverse=1&npp=35&Author=ericq
We're running v2.8.1, since we like using the global write password mode; our log is viewable here: http://nodus.ligo.caltech.edu:8080 Any ideas what could've gone wrong? Installation was pretty straightforward, the code compiled happily on the ubuntu machine.
Incidentally, I notice this logbook is running V3, using CKeditor. Any hints when these might be available for public use?
Thanks!
|
Old versions are not supported any more. I only can fix bugs in the current version. Probably the bug you report is already gone (just give it a try). If you need the global write password mode, you can enable guest read access to your logbook and define a single use with the write password, that's then almost equivalent.
/Stefan
|
using a predefined format with predefined informations that an user should fill at each run of data , posted by Iolanda Matea on Fri Jan 9 17:30:31 2015
|
Hello!
I was wondering if it is possible (and how) to define a template (something equivalent to an excel table with some required informations to be filled) that opens each time one wants to make a new entry of a given type, e.g., I want this template to open only when the informations concern data taking.
I hope I am sufficiently clear ...
Thank you,
I.M. |
Re: using a predefined format with predefined informations that an user should fill at each run of data , posted by Stefan Ritt on Mon Jan 12 11:24:00 2015
|
In ELOG you can define "attributes", so take one attribute for each informaiton you need. The flag these attributes as required via "Required attributes = ...". If you only want this attributes for certain occations (like data taking in your case), you can either do a separato logbook for data taking, or use "conditional attributes" to make these attributes only show up for data taking.
/Stefan
Iolanda Matea wrote: |
Hello!
I was wondering if it is possible (and how) to define a template (something equivalent to an excel table with some required informations to be filled) that opens each time one wants to make a new entry of a given type, e.g., I want this template to open only when the informations concern data taking.
I hope I am sufficiently clear ...
Thank you,
I.M.
|
|
notification error services in CentOS 6.5, posted by Banata on Tue Jan 13 04:11:33 2015
|
hello, I just upgrade from 2.9 into 3.0.0 in CentOS 6.5
but after upgrade, I can't check elogd services via command line
service elogd status,
always result in missing argument, while it works with httpd or mysqld services and old elogd version.
I try to uninstall and install rom scratch and same result,
Okay I give you screenshoot of that,
you may notice, on check service status and stopping services, error resulted |
Re: notification error services in CentOS 6.5, posted by Stefan Ritt on Tue Jan 13 10:07:02 2015
|
The init script supplied with elog was originally written for Redhat. It seems like CentOS has slightly changed the init daemon management, but I'm not an expert on that, nor do I have CentOS installed. If somebody comes with a fixed elogd.init for CentOS, I'm happy to include that in the distribution.
/Stefan
Banata wrote: |
hello, I just upgrade from 2.9 into 3.0.0 in CentOS 6.5
but after upgrade, I can't check elogd services via command line
service elogd status,
always result in missing argument, while it works with httpd or mysqld services and old elogd version.
I try to uninstall and install rom scratch and same result,
Okay I give you screenshoot of that,
you may notice, on check service status and stopping services, error resulted
|
|
|