0

I have systemd service, say xyzWarmup.service.

Here is the service file

[Unit]
Description=Xyz agent.
After=fooAfter.service
Before=fooBefore1.service
Before=fooBefore2.service

[Service]
# During boot the xyz.sh script reads input from /dev/console.  If the user
# hits <ESC>, it will skip waiting for xyz and abc to startup.
Type=oneshot
StandardInput=tty
StandardOutput=tty
ExecStart=/usr/bin/xyz.sh start

RemainAfterExit=True
ExecStop=/usr/bin/xyz.sh stop

[Install]
WantedBy=multi-user.target

Following is the part of xyz.sh.

#! /bin/bash                                                                                                                                                                                               
#                                                              
### BEGIN INIT INFO                                                                                                                                                                                         
# Required-Stop: Post                                                                                                                                                                                       
### END INIT INFO                                                                                                                                                                                           

XYZ=/usr/bin/Xyz
prog="Xyz"
lockfile=/var/lock/subsys/$prog
msg="Completing initialization"

start() {
     # Run wfw in background                                                                                                                                                                                 
    ulimit -c 0
    # wfw has a default timeout of 10 minutes - just pick a large value                                                                                                                                     
    wfw -t 3600 xyz abc >/dev/null 2>&1 &
    PID=$!

    # Display the message here after spawning wfw so Esc can work                                                                                                                                           
    echo -n $"$msg (press ESC to skip): " > /dev/console

    while [ 1 ]; do
        read -s -r -d "" -N 1 -t 0.2 CHAR || true
        if [ "$CHAR" = $'\x1B' ]; then
            kill -9 $PID 2>/dev/null
            # fall through to wait for process to exit                                                                                                                                                      
        fi

        STATE="`ps -p $PID -o state=`"
        if [ "$STATE" = ""  ]; then 
            # has exited                                                                                                                                                                                    
            wait $PID 2>/dev/null
            if [ $? -eq 0 ]; then
                echo "[ OK ]" 
                echo
                exit 0
            else
                echo "[ FAILED ]"
                echo "This is failure"  
                               exit 1
            fi
        fi
    done
}

I am unable to see any echo message, after this line in code "if [ "$STATE" = "" ];". When this script runs during boot I just this the following message coming from the script

 Completing initialization (press ESC to skip): 

I don't see "[ OK ]" or "[ FAILED ]" on my screen.

When I was using this script as initscript in Fedora14, I used to see these messages. Once, I have shifted to systemd. I have started seeing this issue.

systemd version is : systemd-201-2.fc18.9.i686 and systemd.default_standard_output=tty

Kindly help.

  • 1
    Why have you written a script to wait for something to start up? This is something that systemd is perfectly capable of handling for you. – Michael Hampton Dec 18 '15 at 00:46
  • How ? Actually, I was using this as an initscript earlier. So, when I started using systemd. Then, I choose the simplest way of making this as an systemd service and just moved this script to /usr/bin/ and called "start" and "stop" from systemd service. Let me know if I can do it better and if you can help in figuring the actual issue too. – user3872776 Dec 18 '15 at 01:12

0 Answers0