当前位置:首页 » 编程软件 » 停止shell脚本

停止shell脚本

发布时间: 2023-05-15 00:55:01

1. linux系统定时任务时shell脚本停止执行如何解决

linux下使用crontab命令被用来提交和管理用户的需要周期性执行的任务,示例如下:
crontab
-e
编辑周期任务
30
21
*
*
*
/etc/init.d/smb
restart
每晚的21:30重启smb
crontab命令说明:
crontab命令被用来提交和管理用户的需要周期性执行的任务,与windows下的计划任务类似,当安装完成操作系统后,默认会安装此服务工具,并且会自动启动crond进程,crond进程每分钟会定期检查是否有要执行的任务,如果有要执行的任务,则自动执行该任务。
语法
crontab(选项)(参数)
选项
-e:编辑该用户的计时器设置;
-l:列出该用户的计时器设置;
-r:删除该用户的计时器设置;
-u<用户名称>:指定要设定计时器的用户名称。
参数
crontab文件:指定包含待执行任务的crontab文件。
知识扩展
linux下的任务调度分为两类:系统任务调度和用户任务调度。
系统任务调度:系统周期性所要执行的工作,比如写缓存数据到硬盘、日志清理等。在/etc目录下有一个crontab文件,这个就是系统任务调度的配置文件。
crontab文件的含义:
用户所建立的crontab文件中,每一行都代表一项任务,每行的每个字段代表一项设置,它的格式共分为六个字段,前五段是时间设定段,第六段是要执行的命令段,格式如下:
minute
hour
day
month
week
command
顺序:分




其中:
minute:
表示分钟,可以是从0到59之间的任何整数。
hour:表示小时,可以是从0到23之间的任何整数。
day:表示日期,可以是从1到31之间的任何整数。
month:表示月份,可以是从1到12之间的任何整数。
week:表示星期几,可以是从0到7之间的任何整数,这里的0或7代表星期日。
command:要执行的命令,可以是系统命令,也可以是自己编写的脚本文件。
在以上各个字段中,还可以使用以下特殊字符:
星号(*):代表所有可能的值,例如month字段如果是星号,则表示在满足其它字段的制约条件后每月都执行该命令操作。
逗号(,):可以用逗号隔开的值指定一个列表范围,例如,“1,2,5,7,8,9”
中杠(-):可以用整数之间的中杠表示一个整数范围,例如“2-6”表示“2,3,4,5,6”
正斜线(/):可以用正斜线指定时间的间隔频率,例如“0-23/2”表示每两小时执行一次。同时正斜线可以和星号一起使用,例如*/10,如果用在minute字段,表示每十分钟执行一次。

2. Shell 脚本 if 判断后,怎么终止当前脚本但不退出 shell

代码如下:

if list then
do something here
elif list then
do another thing here
else
do something else here
fi

EX1:

复制代码代码如下:

#!/bin/sh
SYSTEM=`uname -s` #获取操作系统类型,我本地是linux
if [ $SYSTEM = "Linux" ] ; then #如果是linux的话打印linux字符串
echo "Linux"
elif [ $SYSTEM = "FreeBSD" ] ; then
echo "FreeBSD"
elif [ $SYSTEM = "Solaris" ] ; then
echo "Solaris"
else
echo "What?"
fi #ifend

基本上和其他脚本语言一样。没有太大区别。不过值得注意的是。[]里面的条件判断。

3. shell脚本启动、关闭服务

java_APP_PATH_WF=/opt/mole/wk-source-wf.jar
JAVA_APP_PATH_REGISTER=/opt/mole/wk-register.jar
python_APP_PATH=/root/main.py

usage() {
echo "Usage: sh 执行脚本.sh [start|stop]"
exit 1
}

python_is_exist(){
pid= ps -ef|grep $PYTHON_APP_PATH|grep -v grep|awk '{print $2}'
# 如果不存在返回1,存在返回0
if [ -z "${pid}" ]; then
return 1
else
return 0
fi
}

python_start(){
python_is_exist
if [ {pid} ."
else
echo "回传引擎 start run"
nohup python $PYTHON_APP_PATH > /root/log/nohup.out 2>&1 &
fi
}

python_stop(){
python_is_exist
if [ pid
else
echo "回传引擎 is not running"
fi
}

java_wf_is_exist(){
pid= ps -ef|grep $JAVA_APP_PATH_WF|grep -v grep|awk '{print $2}'
# 如果不存在返回1,存在返回0
if [ -z "${pid}" ]; then
return 1
else
return 0
fi
}

java_wf_start(){
java_wf_is_exist
if [ {pid} ."
else
echo "采集引擎 start run"
nohup java -jar $JAVA_APP_PATH_WF > /dev/null 2>&1 &
fi
}

java_wf_stop(){
java_wf_is_exist
if [ pid
else
echo "采集引擎 is not running"
fi
}

java_register_is_exist(){
pid= ps -ef|grep $JAVA_APP_PATH_REGISTER|grep -v grep|awk '{print $2}'
# 如果不存在返回1,存在返回0
if [ -z "${pid}" ]; then
return 1
else
return 0
fi
}

java_register_start(){
java_register_is_exist
if [ {pid} ."
else
echo "注册中心 start run"
nohup java -jar $JAVA_APP_PATH_REGISTER > /dev/null 2>&1 &
fi
}

java_register_stop(){
java_register_is_exist
if [ pid
else
echo "注册中心 is not running"
fi
}

start(){
echo "启动注册中心..."
java_register_start
java_register_is_exist
until [ pid, 启动采集引擎..."
java_wf_start
java_wf_is_exist
until [ pid, 启动回传引擎..."
python_start
python_is_exist
until [ pid, 所有引擎已启动完成"
}

stop(){
echo "关闭注册中心..."
java_register_stop
java_register_is_exist
until [ ? -eq "1" ]
do
java_wf_is_exist
done
sleep 5
echo "采集引擎已关闭, 关闭回传引擎..."
python_stop
python_is_exist
until [ $? -eq "1" ]
do
python_is_exist
done
sleep 2
echo "回传引擎已关闭, 所有引擎已关闭"
}

case "$1" in
"start")
start
;;
"stop")
stop
;;
*)
usage
;;
esac
exit 0

4. Windows下Shell脚本运行错误展示错误信息并停止向下执行

shell脚本运行完毕之后会直接关闭窗口,不便于开发者查看运行结果,这点可以通过 sleep 来实现暂停

新建脚本 demoshell

在命令窗口执行 demoshell.sh xxxxx ,会启动 shell 窗口 ,打印 params1= xxxxx 之后就会关闭窗口

想要不关闭窗口可以在脚本的最后添加 sleep 来实现。
例如

再次执行 demoshell.sh xxxxx ,执行完毕之后,窗口不会直接关闭,可以查看运行结果

shell脚本还有一个不好的地方就是中间的一个命令运行失败之后还会继续向下执行,这是一个很危险的行为,并且向下执行的时候会冲掉失败信息,无法根据错误提示来修改脚本。

接下来执行一个不存在的任务,让shell脚本运行失败

执行失败之后由于 sleep 100 ,可以看到错误提示,如果没有 sleep 100 存在,执行失败之后也是立马关闭了窗口,看不到错误信息;而命令执行成功之后需要关闭窗口的,那能不能想办法做到两者兼顾呢?
答案是肯定的,原理就是判断命令执行状态,只有在命令执行失败的时候,触发sleep行为,阻塞命令向下运行

去掉 sleep 100 ,运行脚本,捕获到失败信息,显示错误信息,并停止向下执行

注释掉 ./gradlew :app:emptyTask -x lint ;
再次运行脚本,运行成功,直接就关闭了窗口

5. linux系统中周期性计划任务执行了shell死循环脚本,要怎么停止脚本

ps找到脚本进程
kill掉

6. 如何使用shell脚本停止应用

参考最底下的shell 代码,具体功能都有注释说明的。 使用时将代码存入文件中,比如 a.sh, 然后:

chmod+xa.sh#增加可执行权限
./a.shapp_name#替换app_name为你要中止运行的app名称,比如firefox,emacs,等等


下面是具体代码

#!/bin/bash

#要停止的应用名字
name=$1

#先要找到你要停止的应用的PID(进程号).这里用pidof命令来找
PID=`pidof$name`

#如果没有找到,结束
if[-z"$PID"];then
echo"Error:Process$nameisnotfound"
exit1
fi

#然后用kill命令来向进程发送信号来终止应用
#-9表示发送KILL信号,任何进程收到这个信号后都会无条件终止运行。
kill-9$PID

#完成
echo"Done"

7. shell脚本执行kill命令后自动停止的问题

背景:每周重启jenkins

所以写了一个脚本,命名为 auto_restart_jenkins.sh

其中里面包含了一个kill命令:ps -ef | grep jenkins | grep -v grep | awk '{print "kill -9 "$2}' | sh

但是每次执行到这一步的时候整个shell脚本就被kill掉了。

原因:因为shell脚本名中包含了jenkins,所以在执行kill命令的时候,也就把shell脚本kill掉了。

最后,改一下shell脚本名就好了,不要包含jenkins

或者在shell脚本中添加参数 export BUILD_ID=dontKillMe

8. shell如何停止一条指令

ctrl+z
挂起当前进程
如果需要恢复到前台输入fg,恢复到后台输入bg

ctrl+c,彻底终止该进程

9. linux shell 脚本运行完毕后不能自动停止

最简单方法:
其实,你按一下回车就可以知道是否"结束"了吧?

更好的办法:
你在done后面加多两行:

------------代码开始------------
wait
echo "All is ok"
exit 0
------------代码结束------------

参考资料:
wait 命令
http://book.51cto.com/art/201205/338877.htm

热点内容
比较便宜的云服务器 发布:2025-07-13 18:29:59 浏览:406
切换ftp 发布:2025-07-13 18:29:07 浏览:738
锐龙哪个配置最高画质 发布:2025-07-13 18:22:34 浏览:196
压缩机工作原理图 发布:2025-07-13 18:10:15 浏览:39
黑暗追求者安卓怎么联机 发布:2025-07-13 18:10:07 浏览:617
北大保安自学编程 发布:2025-07-13 18:09:58 浏览:858
java递归排列 发布:2025-07-13 18:02:43 浏览:473
轻量云服务器如何换成d盘 发布:2025-07-13 17:58:45 浏览:931
重置腾讯云服务器时间 发布:2025-07-13 17:54:55 浏览:326
aes256java加密 发布:2025-07-13 17:54:46 浏览:710