2
想请教各位 v2 shell 脚本比较精通的,被这个问题卡住了.
source link: https://www.v2ex.com/t/847275
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
自己写了个检测宽带公网出口 ip 变化的脚本,并通过企微的群聊机器人通知,想放到后台一直运行,但都是运行了:
nohup sh scriptName.sh > /dev/null 2>&1 & 后 使用 ps - ef | grep scriptName.sh 后显示了一次,在此运行命令就看不到运行了。我用 bash -x script Name.sh 可以运行成功,也可以发起通知,但就是放不到后台执行,不知道哪里出问题了,还请各位大神不吝赐教,小弟在此谢过了. 搜了好多文章也没找到问题原因,要😭了.
nohup sh scriptName.sh > /dev/null 2>&1 & 后 使用 ps - ef | grep scriptName.sh 后显示了一次,在此运行命令就看不到运行了。我用 bash -x script Name.sh 可以运行成功,也可以发起通知,但就是放不到后台执行,不知道哪里出问题了,还请各位大神不吝赐教,小弟在此谢过了. 搜了好多文章也没找到问题原因,要😭了.
7 条回复 • 2022-04-16 09:48:58 +08:00
Tink 2 小时 52 分钟前 via Android
你这个脚本里面实现了一直循环?如果没有的话要用 cron
DCCooper 2 小时 50 分钟前 via iPhone
脚本退出了
liangkang1436 2 小时 31 分钟前 via Android
@DCCooper 你要不做成服务算了,启动,停止都方便些
plko345 2 小时 27 分钟前 via Android
那你把结果重定向到文本里呀,可能脚本不健壮,某次失败退出了,你全都指向 null ,有问题也发现不了
zhouzm 2 小时 23 分钟前
# check-gateway.sh
#! /bin/bash
[[ ! -z "$1" ]] && host=$1 || host=192.168.1.1
c=0
last=0
# while [[ $c -lt 100 ]]; do
while true; do
ping -q -c 1 -W 1 $host >/dev/null
current=$?
if [[ $current == 0 ]]; then
if [[ $last != 0 || $c -eq 0 ]]; then
last=$current
echo $( date +%Y-%m-%d\|%H:%M:%S ) :$host online >> /run/check-gateway.log
fi
else
if [[ $last == 0 ]]; then
last=$current
echo $( date +%Y-%m-%d\|%H:%M:%S ) :$host offline >> /run/check-gateway.log
fi
fi
c=$(( $c + 1 ))
sleep 1
done
exit 0
nohup check-gateway.sh $IP >/dev/null 2>&1 &
#! /bin/bash
[[ ! -z "$1" ]] && host=$1 || host=192.168.1.1
c=0
last=0
# while [[ $c -lt 100 ]]; do
while true; do
ping -q -c 1 -W 1 $host >/dev/null
current=$?
if [[ $current == 0 ]]; then
if [[ $last != 0 || $c -eq 0 ]]; then
last=$current
echo $( date +%Y-%m-%d\|%H:%M:%S ) :$host online >> /run/check-gateway.log
fi
else
if [[ $last == 0 ]]; then
last=$current
echo $( date +%Y-%m-%d\|%H:%M:%S ) :$host offline >> /run/check-gateway.log
fi
fi
c=$(( $c + 1 ))
sleep 1
done
exit 0
nohup check-gateway.sh $IP >/dev/null 2>&1 &
ch2 2 小时 22 分钟前 via iPhone
有两个选择:
1. 用 crontab 做成定时任务,每分钟检测一次,每次只跑完就退
2.用 systemctl 做成服务,常驻后台
1. 用 crontab 做成定时任务,每分钟检测一次,每次只跑完就退
2.用 systemctl 做成服务,常驻后台
lcy630409 1 小时 52 分钟前
这个最简单的就是 crontab 了,定时执行即可
Recommend
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK