richter@randvax.UUCP (Susan Richter) (02/05/86)
I am having a strange problem with my LaserWriter server under MDQS. The behavior I see is this: whenever the daemon is started up during boot (in /etc/rc.local), my status- and page-accounting stuff fails because the "listener" child (which is trying to listen on a dup of stdout, attached to the device) can't hear anything. When I use the exact same startup routine but do it myself from a tty, everything works fine. Now, here is what actually happens (describing the case of starting from boot): The mdqsdaemon starts and goes through its init procedure, which: forks a child and the parent suicides, thereby detaching the daemon; closes all file descriptors greater than 2; doesn't do anything to fds 0, 1, or 2. When a request needs to be done, the daemon: opens the device (in this case, the laserwriter, which is on a tty line and has permissions 666) *for reading and writing* (this succeeds); dups that to fd 1; (I put in an fcntl() call to check the mode of fd 1, and already at this point it says it's only open for writing! How can this be?) forks/execs the server, which: dups fd 1, for listening to the LaserWriter's status reports; forks a child to do the listening: child tries to fdopen it for reading, fails, and returns. . . the printing goes fine, server returns. Again, when the daemon is killed and restarted by hand, this all works fine. The only difference I can see is that when it's started from boot, it runs not attached to a terminal (ps shows "?"), and when I start it by hand, it shows attached to my tty. Here's the fragment of rc.local that starts it up, and I use the same script to start it by hand, using "sh script" while su'd to root: ------------------------------------------------------------------------- if [ -d /usr/local/lib/mdqs ]; then rm -f /usr/spool/mdqs/qtmp/* date >> /usr/spool/mdqs/LOGFILE /usr/local/lib/mdqs/mdqsdaemon >> /usr/spool/mdqs/LOGFILE 2>&1 & (cd /usr/local/lib/mdqs; \ netdae -n 4 /usr/local/lib/mdqs/netrecv >> /usr/spool/mdqs/LOGFILE 2>&1) & /usr/local/clearlw /dev/lw2 echo -n ' mdqs' >/dev/console fi ------------------------------------------------------------------------- Any help or suggestions will certainly be appreciated! - Susan Richter richter@rand-unix.ARPA ...!decvax!philabs!ttidca!randvax!richter ...!ihnp4!wlbr!trwrb!randvax!richter From postnews Wed Feb 5 12:07:17 1986 Subject: laserwriter, MDQS, communication problems Newsgroups: mod.computers.laser-printers,net.unix-wizards Distribution: net I am having yet another problem with my LaserWriter server under MDQS. The behavior I see is this: whenever the daemon is started up during boot (in /etc/rc.local), my status- and page-accounting stuff fails because the "listener" child (which is trying to listen on a dup of stdout, attached to the device) can't hear anything. When I use the exact same startup routine but do it myself from a tty, everything works fine. Now, here is what actually happens (describing the case of starting from boot): The mdqsdaemon starts and goes through its init procedure, which: forks a child and the parent suicides, thereby detaching the daemon; closes all file descriptors greater than 2; doesn't do anything to fds 0, 1, or 2. When a request needs to be done, the daemon: opens the device (in this case, the laserwriter, which is on a tty line and has permissions 666) *for reading and writing* (this succeeds); dups that to fd 1; (I put in an fcntl() call to check the mode of fd 1, and already at this point it says it's only open for writing! How can this be?) forks/execs the server, which: dups fd 1, for listening to the LaserWriter's status reports; forks a child to do the listening: child tries to fdopen it for reading, fails, and returns. . . the printing goes fine, server returns. Again, when the daemon is killed and restarted by hand, this all works fine. The only difference I can see is that when it's started from boot, it runs not attached to a terminal (ps shows "?"), and when I start it by hand, it shows attached to my tty. Here's the fragment of rc.local that starts it up, and I use the same script to start it by hand, using "sh script" while su'd to root: ------------------------------------------------------------------------- if [ -d /usr/local/lib/mdqs ]; then rm -f /usr/spool/mdqs/qtmp/* date >> /usr/spool/mdqs/LOGFILE /usr/local/lib/mdqs/mdqsdaemon >> /usr/spool/mdqs/LOGFILE 2>&1 & (cd /usr/local/lib/mdqs; \ netdae -n 4 /usr/local/lib/mdqs/netrecv >> /usr/spool/mdqs/LOGFILE 2>&1) & /usr/local/clearlw /dev/lw2 echo -n ' mdqs' >/dev/console fi ------------------------------------------------------------------------- Any help or suggestions will certainly be appreciated! - Susan Richter richter@rand-unix.ARPA ...!decvax!philabs!ttidca!randvax!richter ...!ihnp4!wlbr!trwrb!randvax!richter -- richter@rand-unix.ARPA ...!decvax!philabs!ttidca!randvax!richter ...!ihnp4!wlbr!trwrb!randvax!richter