У меня есть служба systemd, скажем xyzWarmup.service.
Вот служебный файл
[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
Ниже приводится часть 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
}
Я не вижу ни одного эхо-сообщения после этой строки в коде "if [" $ STATE "=" "];". Когда этот сценарий запускается во время загрузки, я просто получаю следующее сообщение от сценария
Completing initialization (press ESC to skip):
Я не вижу «[OK]» или «[FAILED]» на моем экране.
Когда я использовал этот сценарий в качестве исходного сценария в Fedora14, я видел эти сообщения. Однажды я перешел на systemd. Я начал замечать эту проблему.
Версия systemd: systemd-201-2.fc18.9.i686 и systemd.default_standard_output = tty
Пожалуйста, помогите.