我正在开发远程服务器网络设置。 我需要的是一个脚本,它将重命名“/ etc / network / interfaces”文件,然后重新启动计算机。我得到的重命名,但我没有得到的是我如何终止这个脚本,以防我不需要它。 查看一切是否正常我想发出一个终止此脚本的停止命令,以便服务器不会重新启动。
所以这就是我到目前为止所得到的。问题是:
有什么想法吗?
#! /bin/sh
PATH=/sbin:/usr/sbin:/bin:/usr/bin
. /lib/lsb/init-functions
case "$1" in
start)
;;
export PIDFILE=/var/run/${1}.pid
ps -fe | grep ${1} | head -n1 | cut -d" " -f 6 > ${PIDFILE}
sleep 30 #3600
log_action_msg "WARNING: Will in 60 sec rename /etc/network/interfaces and then restart"
sleep 30# 60
SUFFIX=$(date +%s)
#cp /etc/network/interfaces /etc/network/interfaces.$SUFFIX
cp /tmp/interfaces /etc/network/interfaces.$SUFFIX
sleep 1
#cp /etc/network/interfaces.org /tmp/interfaces
cp /tmp/interfaces.org /tmp/interfaces
sleep 1
#reboot -d -f -i
;;
stop)
if [ -f ${PIDFILE} ]; then
rm ${PIDFILE}
fi
exit 0
;;
*)
echo "Usage: $0 start|stop" >&2
exit 3
;;
esac
答案 0 :(得分:1)
通常这是使用'pid-file'完成的 - 一个预定的文件,它保存当前正在运行的进程的进程标识符。这样,如果它被调用并被告知停止,它会查找pid文件并使用kill
命令向当前正在运行的进程发送信号。
这也有另一个好处 - 如果你在脚本被告知启动时检查是否存在pid文件(以及是否存在该进程),你可以防止意外启动脚本两次,这会阻止这两个实例都有问题。
答案 1 :(得分:1)
stop
操作可以在适当的位置创建文件do.not.restart.server
。
可以修改start
操作以检查do.not.restart.server
文件是否存在,并避免重新启动服务器(如果存在)。它可能/应该删除文件以供将来重新启动 - 或者它应该在它进入休眠状态之前将其删除。
答案 2 :(得分:0)
好的,这是一个工作脚本,它可以满足我的需求。我仍然希望的唯一改进是如何从sleep命令返回提示。 功能就在那里,所以我发布它以防其他人也需要。
感谢Dan和Jonathan Leffler的帮助和想法。
#! /bin/sh
PATH=/sbin:/usr/sbin:/bin:/usr/bin
. /lib/lsb/init-functions
export PIDFILESTART=/tmp/network-safty-restart-start.pid
export PIDFILESTOP=/tmp/network-safty-restart-stop.pid
#export FILE=/etc/network/interfaces
export FILE=/tmp/interfaces
case "$1" in
start)
if [ -f ${PIDFILESTART} ]; then
rm ${PIDFILESTART}
fi
if [ -f ${PIDFILESTOP} ]; then
rm ${PIDFILESTOP}
fi
ps -fe | grep ${1} | head -n1 | cut -d" " -f 6 > ${PIDFILESTART}
sleep 3600
log_action_msg "WARNING: Will in 60 sec rename ${FILE} and then restart"
sleep 60
if ! [ -f ${PIDFILESTOP} ]; then
log_action_msg "Restarting NOW"
SUFFIX=$(date +%s)
cp ${FILE} ${FILE}.${SUFFIX}
sleep 1
cp ${FILE}.org ${FILE}
sleep 1
reboot -d -f -i
else
rm ${PIDFILESTOP}
log_action_msg "NOT Restaring as you wish"
fi
;;
stop)
if [ -f ${PIDFILESTART} ]; then
rm ${PIDFILESTART}
ps -fe | grep ${1} | head -n1 | cut -d" " -f 6 > ${PIDFILESTOP}
log_action_msg "Terminating restart script"
fi
log_action_msg "Terminated restart script"
exit 0
;;
*)
echo "Usage: $0 start|stop" >&2
exit 3
;;
esac