Tôi đã có một tập lệnh shell, về cơ bản là một tập lệnh với một số bản ghi, tôi đang cố gắng chạy tập lệnh này từ tập lệnh init. Tôi đang sử dụng daemon
chức năng bên trong /etc/init.d/functions
để chạy nó, vì Redhat dường như không có start-stop-daemon
sẵn. Khi tôi gọi init script ( /etc/init.d/script start
) nó sẽ ở phía trước, thay vì hoàn thành và để quá trình chạy. Cách thích hợp để tôi có được kịch bản này là gì?
Kịch bản được chạy:
# conf file where variables are defined
. /etc/script.conf
echo "Starting..." | logger -i
echo "Monitoring $LOG_LOCATION." | logger -i
echo "Sending to $MONITOR_HOST:$MONITOR_PORT." | logger -i
tail -n 1 -F $LOG_LOCATION |
grep WARN --line-buffered |
/usr/bin/nc -vv $MONITOR_HOST $MONITOR_PORT 2>&1 |
logger -i
tập lệnh init:
#!/bin/bash
# Source Defaults
. /etc/default/script
# Source init functions
. /etc/init.d/functions
prog=/usr/local/bin/script.sh
[ -f /etc/script.conf ] || exit 1
RETVAL=0
start()
{
# Quit if disabled
if ! $ENABLED; then
echo "Service Disabled in /etc/default/script"
exit 1
fi
echo "Starting $prog"
daemon $prog
RETVAL=$?
return $RETVAL
}
stop ()
{
echo -n $"Stopping $prog: "
killproc $prog
RETVAL=$?
return $RETVAL
}
reload()
{
echo "Reload command is not implemented for this service."
return $RETVAL
}
restart()
{
stop
start
}
condrestart()
{
echo "Not Implemented."
}
# See how we were called.
case "$1" in
start)
start
;;
stop)
stop
;;
status)
status $prog
;;
restart)
restart
;;
reload)
reload
;;
condrestart)
condrestart
;;
*)
echo $"Usage: $0 {start|stop|status|restart|condrestart|reload}"
RETVAL=1
esac
~ 20 dòng thực hiện cuối cùng với bash -vx:
+ case "$1" in
+ start
+ true
+ echo 'Starting /usr/local/bin/script.sh'
Starting /usr/local/bin/script.sh
+ daemon /usr/local/bin/script.sh
+ local gotbase= force=
+ local base= user= nice= bg= pid=
+ nicelevel=0
+ '[' /usr/local/bin/script.sh '!=' /usr/local/bin/script.sh ']'
+ '[' -z '' ']'
+ base=script.sh
+ '[' -f /var/run/script.sh.pid ']'
+ '[' -n '' -a -z '' ']'
+ ulimit -S -c 0
+ '[' -n '' ']'
+ '[' color = verbose -a -z '' ']'
+ '[' -z '' ']'
+ initlog -q -c /usr/local/bin/script.sh
daemon
, cũng có gói RPM . Btw, có nhiều công cụ giám sát nhật ký ngoài kia ( bắt đầu từ đây ).
#!/bin/bash -vx
? Tôi đã thử làm điều này, nhưng nó không tạo ra cùng một đầu ra từ tập lệnh init giống như khi tôi chạy trực tiếp tập lệnh shell.
bash -vx
, tức là. bash -vx /etc/init.d/script start
.
bash -vx ...
và đăng những dòng cuối cùng để chúng ta có thể thấy những gì ở phía trước.