shell脚本在运行时出现"已杀死"停止运行 10C

脚本大致结构如下:
#!/bin/bash
configure(){}
start(){}
restart(){
stop
start}
#我想做一个每隔两分钟就重新启动一次的功能,写了以下的函数:
autorestart(){
restart
sleep 2m
autorestart}
然后运行脚本,用autorestart这个功能
第一次的restart成功了
但是第二次在执行restart时刚刚走到stop命令程序就停止了
出现了已杀死的提示
是这个函数不能重载的原因吗 有没有什么解决的办法呢
补个图
图片说明

7个回答

这是递归吗,如果是就改一下函数

weixin_42340144
柳罐罐 是的吧,就想要隔几分钟执行一次,是因为占系统内存太大了吗
大约 2 年之前 回复

就想要隔几分钟执行一次

应该为在运行时可能编辑的任何文本嵌入字体,具有"使用设备字体"设置的文本除外。

weixin_42340144
柳罐罐 在restart函数里是有写入文件的操作,是因为这个增加了额外的进程的原因吗
大约 2 年之前 回复

stop会杀死进程

autorestart(){
while [ 1 ]; do
restart
sleep 2m
done
}

你可以写休眠函数,stop会杀死进程,然后回收进程,程序被终止

知识体系:
#回顾信号功能
#隐藏在背景中
#在没有控制台的情况下运行
#做得更好
#准确无误的运行
#从头开始
前面运行脚本的方式都是在命令行界面运行,实际上还有运行shell脚本的其他方式,以及中断脚本的运行进程,控制脚本的运行时间都可以实现。
1、处理信号
linux下有各种信号,如停止、启动、终止。通过信号控制shell脚本的运行只需要使得shell脚本接收来自linux体系特定信号时执行命令即可。
1.1、linux信号回顾
系统和应用程序可以生产30多个linux信号,如下罗列出常用的linux系统信号:


信号 值 描述
1 SIGHUP 挂起进程

2 SIGINT 中断进程

3 SIGQUIT 停止进程

9 SIGKILL 无条件终止进程

15 SIGTERM 如果可能的话终止进程

17 SIGSTOP 无条件停止,但不终止进程

18 SIGTSTP 停止或暂停进程,但不终止

19 SIGCONT 重新启动停止的进程


默认情况下,bash shell忽略接收到的任何SIGQUIT和SIGTERM信号,以防止交互的shell意外终止。但是bash shell接收任何SIGHUP和SIGINT信号。
1.2、生成信号
1》中断进程
使用ctrl+c组合键可以生产SIGINT信号,比如用sleep命令测试:
[root@wzp ~]# sleep 100
如果我不使用组合键,那么控制台就无法进行输入了,一直运行该sleep程序,所以通过这方法可以终止进程。
2》暂停进程
有些进程想暂停而不是终止它,可以使用ctrl+z组合键生产SIGTSTP信号
[root@wzp ~]# sleep 100
[1]+ Stopped sleep 100
看到没有,如果是暂停进程,会有log信息显示stopped的。
如上可以看到中括号里面有一个1数值,这个就是shell分配的作业编号,第一个启动的进程分配作业编号1,第二个启动的进程分配作业编号2,依此类推,如果shell会话中存在停止的作业,退出shell会发出警告的:
[root@wzp ~]# exit
exit
There are stopped jobs.
[root@wzp ~]# exit
退出时说存在着被暂停的作业,不过你再次输入exit可以终止了进程强行退出shell,或者说你可以通过Kill命令发出SIGKILL命令终止它:
[root@wzp ~]# sleep 100
[1]+ Stopped sleep 100
[root@wzp ~]# sleep 200
[2]+ Stopped sleep 200
[root@wzp ~]# ps au
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 5007 0.0 0.0 4812 496 pts/0 T 16:19 0:00 sleep 100
root 5009 0.0 0.0 4812 496 pts/0 T 16:19 0:00 sleep 200
root 5025 0.0 0.1 5356 944 pts/0 R+ 16:19 0:00 ps au
[root@wzp ~]# exit
exit
There are stopped jobs.
[root@wzp ~]# kill -9 5007
[root@wzp ~]# kill -9 5009
[1]- 已杀死 sleep 100
[2]+ 已杀死 sleep 200
这样子通过kill进程号达到终止了进程。
1.3、捕获信号
trap命令可以指定通过shell脚本监控和拦截信号,使得信号不被shell处理,而在本地处理它,其格式为:
trap commands signals
下面看个例子,使用trap命令来忽略SIGINT和SIGTERM信号的简单示例:
[root@wzp ~]# chmod u+x 6.1test
[root@wzp ~]# cat 6.1test
#!/bin/bash
trap "echo you can not stop me!" SIGINT SIGTERM
echo "this is a test program"
count=1
while [ $count -le 10 ]
do
echo "loop #$count"
sleep 3
count=$[ $count + 1 ]
done
echo "the program is over"
[root@wzp ~]# ./6.1test
this is a test program
loop #1
loop #2
loop #3
you can not stop me!
loop #4
loop #5
loop #6
you can not stop me!
loop #7
loop #8
you can not stop me!
loop #9
loop #10
the program is over
当如上程序每隔3秒显示一次信息的时候,我通过ctrl+c暂停程序的时候,该信号都被忽略了,并且在trap命令下回显echo you can not stop me!内容,并且程序一直执行完毕。由此可见trap命令的强大哈!
1.4、捕获脚本退出
除了上面在shell脚本中捕获信号之外,还可以在shell脚本退出那瞬间捕获,只需要在trap命令后添加EXIT信号,看下例子:
[root@wzp ~]# cat 6.1test
#!/bin/bash
trap "echo yeah, the program is over" EXIT
count=1
while [ $count -le 5 ]
do
echo "loop #$count"
sleep 3
count=$[ $count + 1 ]
done
[root@wzp ~]# ./6.1test
loop #1
loop #2
loop #3
loop #4
loop #5
yeah, the program is over
当脚本准备退出之际,就会触发trap,并且捕获了EXIT信号显示echo内容
当然,如果你ctrl+c终止进程也是会捕获EXIT信号的,暂停进程则不会。
1.5、移除捕获
我们可以使用破折号来移除捕获,使得shell捕获信号的功能失效,例子:
[root@wzp ~]# cat 6.1test
#!/bin/bash
trap "echo yeah, the program is over" EXIT
count=1
while [ $count -le 5 ]
do
echo "loop #$count"
sleep 3
count=$[ $count + 1 ]
done
trap - EXIT
[root@wzp ~]# ./6.1test
loop #1
loop #2
loop #3
loop #4
loop #5
我只是在上面的例子中最后添加了移除捕获的一行,结果脚本退出的捕获被移除了,就没有了捕获信息显示了。
2、以后台模式运行脚本
有些shell脚本在执行中需要等待漫长时间,而且终端回话无法执行其他操作,这个时候就可以使得shell放置到后台运行。
2.1、以后台模式运行
这个很简单就得以实现,只要在运行脚本时在命令后面附带一个&符号即可。
[root@wzp ~]# cat 6.2test
#!/bin/bash
count=1
while [ $count -le 5 ]
do
echo "loop #$count"
sleep 3
count=$[ $count + 1 ]
done
[root@wzp ~]# ./6.2test &
[5] 7348
[root@wzp ~]# loop #1
loop #2
loop #3
loop #4
loop #5
[5] Done ./6.2test
通过这方法就可以到程序放到后台运行,控制台便可以进行其他操作。
所以可以借用这种方法运行多个程序。
3、在不使用控制台的情况下运行脚本
一个程序运行过程默认情况下会随着中断回话的退出而中断。这个时候就可以借用nohup命令来使得阻塞任何发送到进程的SIGHUP信号。
[root@wzp ~]# cat 6.2test
#!/bin/bash
count=1
while [ $count -le 5 ]
do
echo "loop #$count"
sleep 3
count=$[ $count + 1 ]
done
[root@wzp ~]# nohup ./6.2test &
[2] 7877
[root@wzp ~]# nohup: appending output to “nohup.out”
[root@wzp ~]#
[2]- Done nohup ./6.2test
因为nohup将进程和终端断开,所以进程没有STDOUT和STDERR输出链接。nohup命令将自动把这两类消息重定向到nohup.out这个自动新创建的文件中去:
[root@wzp ~]# cat nohup.out
loop #1
loop #2
loop #3
loop #4
loop #5
这个文件的内容跟命令行运行进程输出是完全一样的!
4、作业控制
shell运行的进程可以通过ctrl+z中断,利用kill终止进程,可以使用发送SIGCONT信号重启停止的进程。对于重启、停止。终止、恢复作业的操作就叫做作业控制。
4.1、查看作业
通过jobs命令可以直接查看shell处理的当前作业,看例子:
[root@wzp ~]# nohup ./6.2test &
[1] 8477
[root@wzp ~]# nohup: appending output to “nohup.out”
[root@wzp ~]# nohup ./6.2test &
[2] 8479
[root@wzp ~]# nohup: appending output to “nohup.out”
[root@wzp ~]# jobs
[1]- Running nohup ./6.2test &
[2]+ Running nohup ./6.2test &
[root@wzp ~]# jobs
[1]- Done nohup ./6.2test
[2]+ Done nohup ./6.2test
我运行两次同样的脚步程序到后台,然后通过jobs查看,显示running状态,等到脚步运行结束再次jobs查看即可显示已完成状态。
[root@wzp ~]# nohup ./6.2test &
[2] 8594
[root@wzp ~]# nohup: appending output to “nohup.out”
[root@wzp ~]# jobs
[2]+ Running nohup ./6.2test &
[root@wzp ~]# kill 8594
[root@wzp ~]# jobs
[2]+ 已终止 nohup ./6.2test
当脚本一开始运行到后台会显示了PID号8594,当脚本还没运行结束我kill掉进程,也可以通过jobs查看出进程已经被kill了。
4.2、重新启动停止的作业
我们可以通过ctrl+z暂停进程,当要重新启动停止的作业时可以通过使用带有作业编号的bg命令,看例子:
[root@wzp ~]# nohup ./6.2test
nohup: appending output to “nohup.out”
[1]+ Stopped nohup ./6.2test
[root@wzp ~]# jobs
[1]+ Stopped nohup ./6.2test
[root@wzp ~]# bg 1
[1]+ nohup ./6.2test &
[root@wzp ~]# jobs
[1]+ Running nohup ./6.2test &
[root@wzp ~]# jobs
[1]+ Done nohup ./6.2test
先是把程序放到后台运行,然后马上暂停了进程运行,通过jobs即可查看。然后通过bg命令附带作业编号1重启进程。注意:作业编号在我一开始暂停进程的时候就显示了[1]。
上面的bg命令重启的进程后是放到进程去运行的。如果你想把它放到显示屏运行,即可以使用带编号的fg命令,看例子:
[root@wzp ~]# ./6.2test
loop #1
loop #2
[1]+ Stopped ./6.2test
[root@wzp ~]# fg 1
./6.2test
loop #3
loop #4
loop #5
运行一半的程序被暂停后,通过fg 1又可以调到命令行运行下去了。
5、使脚本更好的运行
linux是一个多任务操作系统,内核负责为系统中运行的每个进程分配CPU时间。而CUP中一次就能运行一个进程,因此内核轮流向每个进程分配CPU时间。从shell启动的所有进程在linux系统上的调度优先级都是相同的。调度优先级是内核相对其他进程分配某一个进程的CPU时间量。
调度优先级是一个整数值,从-20(最高优先级)到+20(最低优先级),默认情况下,bash shell启动所有优先级为0的进程
5.1 nice命令
nice命令可以在启动命令时设置它的调度优先级,要让命令在更低的优先级下运行,可以使用-n选项。看个例子:
[root@wzp ~]# nice -n 10 ./6.2test &
[1] 9888
这样子,该程序就运行在10优先级下了。还有一点注意的是我是通过root超级用户设定脚本运行的优先级别,如果设置在更低的优先级,对于普通用户即可操作,并且一般是属于该脚本程序的用户所有者。但是普通用户无法设置脚本再更高的优先级别下运行。看例子:
[testuser@wzp ~]$ ll
总计 8
-rwxr--r-- 1 testuser root 107 02-15 20:00 6.2test
[testuser@wzp ~]$ nice -n 10 ./6.2test &
[1] 10164
[testuser@wzp ~]$
loop #1
loop #2
loop #3
运行指定在低优先级是没问题的!
[testuser@wzp ~]$ nice -n -10 ./6.2test &
[1] 10186
[testuser@wzp ~]$ nice: cannot set niceness: 权限不够
[1]+ Exit 1 nice -n -10 ./6.2test
设定在高优先级下运行报权限不够的错误信息!
5.2、renice命令
有使用需要更改系统中已运行的优先级,就可以使用renice命令,例子:
[root@wzp ~]# nohup ./6.2test &
[1] 10369
[root@wzp ~]# nohup: appending output to “nohup.out”
[root@wzp ~]# renice -10 -p 10369
10369: old priority 0, new priority -10
原先我设定脚本在后台运行,并且默认是0的优先级别。通过renice命令指定-10更高的优先级别,并且通过-p加PID号设定,从log信息我们知道旧的调度优先级被修改了。
6、准确无误的运行
shell脚本有时候需要设定在给定的时间运行,特别是半夜,等业务量没有那么忙的时候往往是SA反而忙碌的时候,我们很容易可以想到通过计划任务是实现这一需求,这里头主要有三种方式:
*at 命令
*batch 命令
*cron 表格
6.1、使用at命令调度作业
对于at命令的具体使用方面这里就不罗嗦了,可以看下网上的资料或者linux的复习进阶一讲述。其命令格式、日期格式都是需要注意的。
这里讲述下通过运行atd和sendmail应用程序来获取作业输出:
由于linux使用提交作业的用户的电子邮箱地址作为STDOUT和STDERR,所以任何以STDOUT和STDERR为目的地的输出都通过电子邮件发送给用户。
当需要制定运行某个文件的at计划,可以附带-f选项,如:
at -f testfile xx:xx
当制定好at命令后可以通过atq命令查看计划列表;
如果要删除已经制定好的计划列表可以通过atrm命令,附带计划number。
6.2、使用batch命令
batch命令跟at命令不太相同,我们知道at命令是在一个指定的时间运行计划好的命令,而batch则是安排脚本在系统使用率低的时候运行。如果linux处于高负荷下运行,那么batch命令就会延迟提交作业的运行。跟at命令类型的地方是命令的格式,可以通过-f参数从文件中读取,默认从STDIN读取。
6.3、调度定期脚本
如果需要脚本在每天、每周、每月的一个特定时间执行脚本,就可以使用cron程序调度需要运行的作业。cron程序在后台运行,它从特殊表格中查找需要调度运行的作业。
对于cron表格的一些命令格式、时间格式,构建cron表格等内容就不说了,这个直接去找网上资料或者看linux复习进结一的计划任务即可。
不过有点挺搞的提及下:系统管理员想在每个月的最后一天执行脚本,那么cron表格应该怎么写么?我们知道每个月的最后一天有可能是28、29、30、31,那么应该怎么判断这一天呢?答案:
这里可以借助添加if-then语句,用date命令检查明天是否1号即可解决问题,具体的cron表格内容如下:

  • * * * * if [ date +%d -d tomorrow = 01 ]; then ; command 通过这种方法就可以判定每个月最后一天啦~(≧▽≦)/~
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
从Shell脚本运行Golang脚本

<div class="post-text" itemprop="text"> <p>I'm trying to run my golang program whenever I log into OSX. I'm trying the following script with Automator:</p> <pre><code>#!/bin/sh export GOPATH=/Volumes/DTSE9/worker go run /Volumes/worker/worker.go </code></pre> <p>Whenever I run this with Automator, it tells me <code>go: command not found</code></p> </div>

shell脚本分析,并说明运行结果

分析下列名为pp_traverse.sh的shell脚本的功能,并说明在shell中用下列命令运行此脚本的结果是什么。 $ bash pp_traverse.sh a1 b2 c3 d4 #!/bin/bash ## filename: pp_traverse.sh # Usage: pp_traverse.sh [arguments] echo "The name of this script is: `basename $0`" echo "The arguments are: $*" echo "The number of arguments is: $#" for i in “$@” ; do echo "$i" ; done num=1 for i in “$@”; do echo "The ${num}th argument is: $i" ((num++)) done

关于shell脚本运行的问题

#! /system/bin/sh echo "bb" am force-stop "com.example.aaaaa" #! /system/bin/sh echo "startMainAvtivity" am start -n "com.example.aaaaa/.MainActivity"这两个脚本(暂且叫为脚本吧╮(╯▽╰)╭)无论在哪一个后面随便加句话 哪怕是echo "qq" 都无法在执行 在第一个后面加的话执行完不报错 但是am force-stop 这句话就没执行一样 没关闭那个程序 在第二个脚本后面加的话 就会报错 start MainActivity }arting: Intent { cmp=com.example.aaaaa/.MainActivity Error type 3 } does not exist.lass {com.example.aaaaa/com.example.aaaaa.MainActivity qq 有哪位知道啊 这是怎么回事啊 就算里面有句被注释掉的 也无法运行那个脚本

如何用Java后台执行SHELL脚本?

有一个SHELL脚本,运行时常驻内存,所以如果是在命令行下运行,命令会是像这样: nohup /someurl/test.sh& 为了方便管理、启动,现在有一个JAVA前台程序,使用Runtime.getRuntime().exec()的方式,想启动或者中止这个SHELL脚本。 中止程序没有问题,取得PID后,用kill命令就可以结束这个进程了。 现在的问题是,如何才能后台启动这段程序,而同时让JAVA不用等待程序执行完成? 下面这段程序虽然能启动,但是除非手动中止t.sh,否则最后的那后finished...一直不会执行, java在等待程序执行完成后才继续下面的操作。 [code="java"] public static void main(String[] args) throws Exception{ String cmd = "nohup /pmapp/liuyi/java/t.sh&"; String[] cmds = {"/bin/ksh", "-c", "nohup /someurl/test.sh&"}; Process p = Runtime.getRuntime().exec(cmds); BufferedReader in = new BufferedReader(new InputStreamReader(p.getInputStream())); String s = ""; while((s=in.readLine()) != null){ System.out.println(s); } System.out.println("finished..."); } [/code]

shell脚本执行异常,一直循环

脚本目的,分析脚本执行结果,将有问题的项目附加到结果后面。 #!/bin/bash function analyse_report() { abnormal_item=$1 IP=$2 case "$abnormal_item" in 3) echo "hostname of $IP">>Linux_1410221605.txt cat ../result/1410231618/result_192.168.59.199/hostname.log >>Linux_1410221605.txt ;; 4) echo "system_version of $IP">>Linux_1410221605.txt cat ../result/1410231618/result_192.168.59.199/uname.log | awk '{print $3}'>>Linux_1410221605.txt ;; 5) echo "disk_usage of $IP">>Linux_1410221605.txt cat ../result/1410231618/result_192.168.59.199/df.log>>Linux_1410221605.txt ;; 6) echo "CPU_usage of $IP">>Linux_1410221605.txt cat ../result/1410231618/result_192.168.59.199/iostat.log>>Linux_1410221605.txt ;; 7) echo "IO_usage of $IP">>Linux_1410221605.txt cat ../result/1410231618/result_192.168.59.199/iostat.log >>Linux_1410221605.txt ;; 8) echo "MEM_usage of $IP">>Linux_1410221605.txt cat ../result/1410231618/result_192.168.59.199/free.log>>Linux_1410221605.txt ;; 9) echo "SWAP_usage of $IP">>Linux_1410221605.txt cat ../result/1410231618/result_192.168.59.199/free.log| >>Linux_1410221605.txt ;; esac } echo "\n\n" >>Linux_1410221605.txt echo "****************************The following is the abnormal items****************************\n" >>Linux_1410221605.txt while read line do Result_line=`echo $line |grep ^[[:digit:]]|grep "XX"` for((i=1;i<=7;i++)) do Item_num=$[$i+2] >/dev/null 2>&1 IP=`echo $Result_line | awk '{print $1}'` Result=`echo $Result_line|tr -s [" "] [":"]|cut -d ":" -f $Item_num` if [ "$Result" == "--" ] then continue else analyse_report $Item_num $IP fi done done < "Linux_1410221605.txt" Linux_1410221605.txt格式 192.168.1.1 test -- -- XX -- -- -- -- 1410231700 脚本运行后,发现两个参数没有传递到function,而且程序一直循环, 没找到错误,求解!!! 不胜感激!

Linux中shell脚本if判断语句中的逻辑"非"!不就怕结果取反了吗?

以下代码表示,判断目录是否存在,若存在则结束条件判断和整个shell脚本,若不存在,则创建这个目录。 ``` $DIR="/media/cdrom" if [ ! -e $DIR] then mkdir -p $DIR fi ``` 疑问:按照《Linux就该这么学》4.2.3章节的内容,将!非符号在中括号里面,不就把条件测试-e $DIR 的判断结果取反了吗?即:如果目录存在,则0存在变成1不存在;如果目录不存在,则把不存在1变成存在0,都会变成反值,还如何做判断?不理解……

如何用java执行shell脚本先kill掉进程然后再重新执行noup java -jar xxx.jar &的命令,我使用java执行shell脚本能kill 掉进程,但是后面重启命令没生效,shell脚本单独运行又是能正常kill掉然后重启的

相关脚本在下方 #!/bin/bash #jar包文件路径及名称(目录按照各自配置) APP_NAME=/home/alitest20200514.jar #日志文件路径及名称(目录按照各自配置) LOG_FILE=/home/monifashe.log #查询进程,并杀掉当前jar/java程序 pid=`ps -ef|grep $APP_NAME | grep -v grep | awk '{print $2}'` kill -9 $pid echo "$pid进程终止成功" sleep 2 #判断jar包文件是否存在,如果存在启动jar包,并时时查看启动日志 if test -e $APP_NAME then echo '文件存在,开始启动此程序...' # 启动jar包,指向日志文件,2>&1 & 表示打开或指向同一个日志文件 nohup java -jar $APP_NAME > $LOG_FILE 2>&1 & #实时查看启动日志(此处正在想办法启动成功后退出) tail -f $LOG_FILE #输出启动成功(上面的查看日志没有退出,所以执行不了,可以去掉) #echo '$APP_NAME 启动成功...' else echo '$APP_NAME 文件不存在,请检查。' fi 下方是java调用代码 /** * 带返回结果的命令执行 * @return */ public static void execCmdWithResult() { try { String cmd = "java_start.sh"; // String command = cmd; // //接收正常结果流 // ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); // //接收异常结果流 // ByteArrayOutputStream errorStream = new ByteArrayOutputStream(); // CommandLine commandline = CommandLine.parse(command); // DefaultExecutor exec = new DefaultExecutor(); // exec.setExitValues(null); // //设置一分钟超时 // ExecuteWatchdog watchdog = new ExecuteWatchdog(60*1000); // exec.setWatchdog(watchdog); // PumpStreamHandler streamHandler = new PumpStreamHandler(outputStream,errorStream); // exec.setStreamHandler(streamHandler); // exec.execute(commandline); // //不同操作系统注意编码,否则结果乱码 // String out = outputStream.toString("utf-8"); // String error = errorStream.toString("utf-8"); ProcessBuilder pb = new ProcessBuilder("./"+cmd); pb.directory(new File("/home/")); int runningStatus = 0; String s = null; Process p = pb.start(); BufferedReader stdInput = new BufferedReader(new InputStreamReader(p.getInputStream())); BufferedReader stdError = new BufferedReader(new InputStreamReader(p.getErrorStream())); while ((s = stdInput.readLine()) != null) { System.out.println("正常:" + s); } while ((s = stdError.readLine()) != null) { System.out.println("不正常:" + s); } runningStatus = p.waitFor(); System.out.println("runningStatus:" + runningStatus); } catch (Exception e) { e.printStackTrace(); } }

shell脚本调用另一个shell脚本问题

问题描述: 现在有两个shell脚本A和B,用A脚本去调用B脚本,B脚本中有一条将程序放到后台执行的语句。两脚本大体内容如下: A脚本: #!/bin/bash source /etc/profile source ~/.bash_profile B B脚本: #!/bin/bash source /etc/profile source ~/.bash_profile nohup command & 这时候执行A脚本,发现虽然成功调用了B脚本,并且看到了B脚本中的程序放到后台的回显,但是此时查看发现后台并没有command程序。 个人感觉可能是A脚本fork出子进程,然后B脚本的后台command程序是放在子进程中的,之后A脚本及其子进程退出,后台的程序也一并退出了。 其后我使用了source B来调用B脚本,以及在B脚本最后写入sleep命令,即程序放到后台后B脚本并不退出,但是同样的结果,还是发现command程序没有启动。 请问有没有大佬知道这种情况的原因和解决办法呢?需要这样做的原因是A脚本是一个监控脚本,发现异常以后,去调用执行B脚本,而B脚本是command程序的启动脚本。如果将nohup command &放入A脚本中去启动,而不是通过调用B脚本的方式启动command程序可以行,但是感觉管理混乱,并且想弄明白这个问题的原因。

java 与 shell 交互有没有好的工具? java调用shell脚本,shell脚本执行过程中需要输入参数的那种?

**不只是简单的调用shell** **不只是简单的调用shell** **不只是简单的调用shell** ### 场景 Java 应用程序调用本地 shell 命令,shell 执行过程中,需要接受入参来进行后续的 shell 中的逻辑。 **脚本demo** ```shell #!/bin/sh echo "What's your name? : " read name echo "Hello $name!" echo "How old are you? :" read age echo "You are $age years old" ``` **我想要的效果** 我现在想用 java 去调用这样子一个脚本,并且希望可以通过 java 把 name 和 age 输入到 shell 中,然后获取到 shell 的输出结果。

shell脚本怎么调用python的return值

我在python下写了一个比较字符串的python函数如下: import time if __name__ == "__main__": fo = open("steps.txt", "r+") steps = fo.read() print "读取的step是 : ", steps fo.close() T0 = 0 X = 600 ticks = time.time() T = (long(ticks) - T0) / X step = str(T).upper() while len(step) < 16: step = "0" + step def compare(): if steps == step: return 1 else: return 0 compare() 然后我想在shell脚本里调用这个compare.py获取函数return的值 代码如下: #!/bin/bash var1=`python compare.py` echo $var1 $var1并没有输出我想看到的return值1或0,而是执行了整个py文件 我只想接受这个return值有什么好的方法吗

从shell脚本运行yii命令

<div class="post-text" itemprop="text"> <p>I am trying to make a script which automaticly loads a project from a git repository. I run <code>exec()</code> from a php file with name of the shell script as an argument. The script looks something like this:</p> <pre><code>git pull php yii migrate </code></pre> <p>The git command works well, but the yii command is totally ignored. I'm doing this from the root of the directory of the yii site, so it should work, but it doesn't. How can I fix this?</p> </div>

shell脚本运行java的jar包,并且系统是没有安装过jre的,不过有jre没安装过的压缩包

![图片说明](https://img-ask.csdn.net/upload/201510/15/1444881921_694387.png) 图中三条线分别是 jre ,java程序的jar包,和shell脚本 当前linux系统没有安装jre和jdk,我要怎么写shell脚本,才能运行jar包啊。是不是运行jar包之前还要在shell脚本中用命令把jre安装了啊。求大神。在线等。。。。。。最好把脚本写好了。。。。。谢谢,悬赏大大滴

如何使用ajax在php页面中运行时显示shell脚本的输出

<div class="post-text" itemprop="text"> <p>I have two php pages. 1st page will load at client browser and display buttons. If clicked it will use ajax call to execute my second php page. The 2nd php page connects to a server using ssh2_exec, execute some shell scripting and display the output on the same loaded page without refresh. I am able to achieve this with my existing pages. But it displays complete output at once after 2nd page completes its execution. I want as the 2nd php page start execution the output should start displaying line by line on client browser. </p> <p>Below are my 2 pages:</p> <p>php page1:</p> <pre><code>&lt;!DOCTYPE html&gt; &lt;head&gt; &lt;link rel="stylesheet" href="../css/new_style.css" /&gt; &lt;/head&gt; &lt;script&gt; function disable() { document.getElementById("save").disabled = true; } function enable_button() { document.getElementById("save").disabled = false; if (window.XMLHttpRequest) { xmlhttp = new XMLHttpRequest(); } else { xmlhttp = new ActiveXObject('Microsoft.XMLHTTP'); } xmlhttp.onreadystatechange = function() { if (xmlhttp.readyState == 4 &amp;&amp; xmlhttp.status == 200) { document.getElementById('output').innerHTML = xmlhttp.responseText; } } xmlhttp.open('GET', 'arg0_orgcmd_exec.php?id=118' , true); xmlhttp.send(); } function disable_button() { document.getElementById("execute").disabled = true; } &lt;/script&gt; &lt;body&gt; &lt;div class="main_body"&gt; &lt;form action=" " method="" name="output_frame"&gt; &lt;center&gt; &lt;input class=" " id="execute" onclick="enable_button();" type="button" name="submit" value="Execute" /&gt; &lt;input class=" " disabled name="save" id="save" type="submit" onclick="disable_button();" value="Save In File" /&gt; &lt;input class=" btn btn-danger back-btn" type=button onclick="location.href='main_menu.php'" value='Close' /&gt; &lt;/center&gt; &lt;/form&gt; &lt;/div&gt; &lt;div id="output" class="output"&gt; &lt;/div&gt; &lt;iframe name="iframe_output"&gt;&lt;/iframe&gt; &lt;/body&gt; &lt;/html&gt; </code></pre> <p>arg0_orgcmd_exec.php :</p> <pre><code>&lt;?php $page_id = $_GET['id']; $conn = ssh2_connect($server_ip,$server_port); ssh2_auth_password($conn, $server_id, $server_pass); //Checking web.lock file $stream_lock = ssh2_exec($conn, "ls /tmp/web.lock" ); stream_set_blocking($stream_lock, true); $check_lock = stream_get_contents($stream_lock); if(empty($check_lock)) { $script_output1 = ssh2_exec($conn, "touch /tmp/web.lock ; my_script.sh ; rm -rf /tmp/web.lock" ); stream_set_blocking($script_output1, true); echo "&lt;pre&gt;"; while($line1 = fgets($script_output1)) { echo $line1; ob_flush(); flush(); } echo "&lt;/pre&gt;"; echo "&lt;br /&gt;"; echo "&lt;h2&gt;Script Output Finished!!!!&lt;h2&gt;"; echo "&lt;br /&gt;"; }else {echo "Already one pending script running in selected server. Kindly wait!!!"; } fclose($script_output1); ssh2_exec($conn, 'exit'); unset($conn); ?&gt; </code></pre> </div>

shell脚本中grep命令及if判断

我想写一个脚本 通过orderid在20_$date1.data这个文件中查找包含orderid行,通过/dev/null 2>&1返回值判断是否存在此orderid行,再根据if else对包含该orderid行进行更改,可是 执行的时候总是返回 1 is not exist(我用grep单纯查找的时候是可以找到的,并且orderid并不是1),这段脚本哪里不正确呢? ``` grep "$orderid" 20_$date1.data >/dev/null 2>&1 if [ $? -eq 0 ] && [ "$status" = "1" ]; then echo $orderid " is exist" sed -n -i '/$orderid/s/SUCCESS|0|扣款成功/FAIL|G002|交易失败/' $Apphome1/testBatchCutResp/20_$date1.data elif [ $? -eq 0 ] && [ "$status" = "2" ]; then echo $orderid " is exist" sed '/$orderid/d' else echo $orderid " is not exist" fi ```

在网站上执行shell脚本:始终在单个实例中运行

<div class="post-text" itemprop="text"> <p>I'm calling a bash script over a website using html/php. There are multiple html-buttons available that always start the same script, but with different arguments. The problem is, that every time I start to call the script by clicking on such a button, a new instance of the script is opened.</p> <p>Is it possible to kind of <em>"pick up" the running instance of the script</em> and not starting a new one?</p> <p><strong>Note:</strong> i can't just exit the active instance of the script and starting a new one, as serveral background functions are running which would be stopped then too.</p> </div>

新编写的shell脚本命令,运行时,显示comamand not found

在ubuntu 15.04 ~/目录已经建立bin文件夹,并把新编写的shell脚本,放在~/bin目录下,使用绝对目录时运行脚本文件,是可以运行的,但是在/usr/include/mysql目录下运行,脚本命令时,显示command not found 通过网上查询,说是未设置环境变量的问题,可是查看环境变量,已经包含~/bin目录,就是不清楚为什么在/usr/include/mysql目录下运行不成功 求各位大神不吝指教!!!

shell脚本在运行中,有时暂停了,按ctrl+c后又继续执行,这会是什么情况?

有两个shell脚本,a.sh和b.sh。a.sh中调用b.sh,待b.sh执行完后后没有继续运行a.sh中的内容,按ctrl+c后,a.sh继续运行。a.sh和b.sh都没有做过信号量的特殊处理,且这个现象是有时出现,现在不知道怎么调试,这会是什么情况造成?

在程序中调用shell脚本执行kettle抽取报错

前提:服务器中间件用的是weblogic,操作系统用的是linux,kettle在服务器端执行抽取完全没有问题; 但是在程序中远程调用shell脚本执行却报错,以下是程序中调用代码: ... String[] command = { "/bin/sh", "-c", "XX.sh" }; Process ps = Runtime.getRuntime().exec(command); ... 报错信息为Error occured while trying to connect to the database! 已知:shell脚本路径没有问题、数据库一切正常、kettle数据库配置文件也没问题,kettle在服务器端执行抽取完全没有问题; 请各位大神帮忙分析下原因!谢谢! ![图片说明](https://img-ask.csdn.net/upload/201705/12/1494578158_306718.jpg)

linux 中,执行sh脚本时,如何先杀掉当前运行的程序,在重新打开程序

比如我想定时重启 a.jar ,那我就会做一个 SH 脚本,然后做任务计划,定时执行SH脚本; 但是最近发现这样一个问题, a.jar 会卡死,当他卡死的之后,任务计划在执行 SH 时,就没反应了 现在是想,在执行 SH 时,先判断 a.jar 是否运行,没运行,就启动;如果在运行,就杀掉进程,在重新启动。 在线等,该脚本该如何写呢。

技术大佬:我去,你写的 switch 语句也太老土了吧

昨天早上通过远程的方式 review 了两名新来同事的代码,大部分代码都写得很漂亮,严谨的同时注释也很到位,这令我非常满意。但当我看到他们当中有一个人写的 switch 语句时,还是忍不住破口大骂:“我擦,小王,你丫写的 switch 语句也太老土了吧!” 来看看小王写的代码吧,看完不要骂我装逼啊。 private static String createPlayer(PlayerTypes p...

Vue + Spring Boot 项目实战(十九):Web 项目优化解决方案

快来一起探索如何打脸我们的破项目,兄弟姐妹们把害怕打在公屏上!

你连存活到JDK8中著名的Bug都不知道,我怎么敢给你加薪

CopyOnWriteArrayList.java和ArrayList.java,这2个类的构造函数,注释中有一句话 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 public ArrayList(Collection&lt;? ...

副业收入是我做程序媛的3倍,工作外的B面人生是怎样的?

提到“程序员”,多数人脑海里首先想到的大约是:为人木讷、薪水超高、工作枯燥…… 然而,当离开工作岗位,撕去层层标签,脱下“程序员”这身外套,有的人生动又有趣,马上展现出了完全不同的A/B面人生! 不论是简单的爱好,还是正经的副业,他们都干得同样出色。偶尔,还能和程序员的特质结合,产生奇妙的“化学反应”。 @Charlotte:平日素颜示人,周末美妆博主 大家都以为程序媛也个个不修边幅,但我们也许...

CSDN:因博主近期注重写专栏文章(已超过150篇),订阅博主专栏人数在突增,近期很有可能提高专栏价格(已订阅的不受影响),提前声明,敬请理解!

CSDN:因博主近期注重写专栏文章(已超过150篇),订阅博主专栏人数在突增,近期很有可能提高专栏价格(已订阅的不受影响),提前声明,敬请理解! 目录 博客声明 大数据了解博主粉丝 博主的粉丝群体画像 粉丝群体性别比例、年龄分布 粉丝群体学历分布、职业分布、行业分布 国内、国外粉丝群体地域分布 博主的近期访问每日增量、粉丝每日增量 博客声明 因近期博主写专栏的文章越来越多,也越来越精细,逐步优化文章。因此,最近一段时间,订阅博主专栏的人数增长也非常快,并且专栏价

一个HashMap跟面试官扯了半个小时

一个HashMap能跟面试官扯上半个小时 关注 安琪拉的博客 1.回复面试领取面试资料 2.回复书籍领取技术电子书 3.回复交流领取技术电子书 前言 HashMap应该算是Java后端工程师面试的必问题,因为其中的知识点太多,很适合用来考察面试者的Java基础。 开场 面试官: 你先自我介绍一下吧! 安琪拉: 我是安琪拉,草丛三婊之一,最强中单(钟馗不服)!哦,不对,串场了,我是**,目...

我说我不会算法,阿里把我挂了。

不说了,字节跳动也反手把我挂了。

记录下入职中软一个月(外包华为)

我在年前从上一家公司离职,没想到过年期间疫情爆发,我也被困在家里,在家呆着的日子让人很焦躁,于是我疯狂的投简历,看面试题,希望可以进大公司去看看。 我也有幸面试了我觉得还挺大的公司的(虽然不是bat之类的大厂,但是作为一名二本计算机专业刚毕业的大学生bat那些大厂我连投简历的勇气都没有),最后选择了中软,我知道这是一家外包公司,待遇各方面甚至不如我的上一家公司,但是对我而言这可是外包华为,能...

面试:第十六章:Java中级开发

HashMap底层实现原理,红黑树,B+树,B树的结构原理 Spring的AOP和IOC是什么?它们常见的使用场景有哪些?Spring事务,事务的属性,传播行为,数据库隔离级别 Spring和SpringMVC,MyBatis以及SpringBoot的注解分别有哪些?SpringMVC的工作原理,SpringBoot框架的优点,MyBatis框架的优点 SpringCould组件有哪些,他们...

培训班出来的人后来都怎么样了?(二)

接着上回说,培训班学习生涯结束了。后面每天就是无休止的背面试题,不是没有头脑的背,培训公司还是有方法的,现在回想当时背的面试题好像都用上了,也被问到了。回头找找面试题,当时都是打印下来天天看,天天背。 不理解呢也要背,面试造飞机,上班拧螺丝。班里的同学开始四处投简历面试了,很快就有面试成功的,刚开始一个,然后越来越多。不知道是什么原因,尝到胜利果实的童鞋,不满足于自己通过的公司,嫌薪水要少了,选择...

面试了一个 31 岁程序员,让我有所触动,30岁以上的程序员该何去何从?

最近面试了一个31岁8年经验的程序猿,让我有点感慨,大龄程序猿该何去何从。

大三实习生,字节跳动面经分享,已拿Offer

说实话,自己的算法,我一个不会,太难了吧

程序员垃圾简历长什么样?

已经连续五年参加大厂校招、社招的技术面试工作,简历看的不下于万份 这篇文章会用实例告诉你,什么是差的程序员简历! 疫情快要结束了,各个公司也都开始春招了,作为即将红遍大江南北的新晋UP主,那当然要为小伙伴们做点事(手动狗头)。 就在公众号里公开征简历,义务帮大家看,并一一点评。《启舰:春招在即,义务帮大家看看简历吧》 一石激起千层浪,三天收到两百多封简历。 花光了两个星期的所有空闲时...

工作八年,月薪60K,裸辞两个月,投简历投到怀疑人生!

近日,有网友在某职场社交平台吐槽,自己裸辞两个月了,但是找工作却让自己的心态都要崩溃了,全部无果,不是已查看无回音,就是已查看不符合。 “工作八年,两年一跳,裸辞两个月了,之前月薪60K,最近找工作找的心态崩了!所有招聘工具都用了,全部无果,不是已查看无回音,就是已查看不符合。进头条,滴滴之类的大厂很难吗???!!!投简历投的开始怀疑人生了!希望 可以收到大厂offer” 先来看看网...

大牛都会用的IDEA调试技巧!!!

导读 前天面试了一个985高校的实习生,问了他平时用什么开发工具,他想也没想的说IDEA,于是我抛砖引玉的问了一下IDEA的调试用过吧,你说说怎么设置断点...

都前后端分离了,咱就别做页面跳转了!统统 JSON 交互

文章目录1. 无状态登录1.1 什么是有状态1.2 什么是无状态1.3 如何实现无状态1.4 各自优缺点2. 登录交互2.1 前后端分离的数据交互2.2 登录成功2.3 登录失败3. 未认证处理方案4. 注销登录 这是本系列的第四篇,有小伙伴找不到之前文章,松哥给大家列一个索引出来: 挖一个大坑,Spring Security 开搞! 松哥手把手带你入门 Spring Security,别再问密...

97年世界黑客编程大赛冠军作品(大小仅为16KB),惊艳世界的编程巨作

这是世界编程大赛第一名作品(97年Mekka ’97 4K Intro比赛)汇编语言所写。 整个文件只有4095个字节, 大小仅仅为16KB! 不仅实现了3D动画的效果!还有一段震撼人心的背景音乐!!! 内容无法以言语形容,实在太强大! 下面是代码,具体操作看最后! @echo off more +1 %~s0|debug e100 33 f6 bf 0 20 b5 10 f3 a5...

程序员是做全栈工程师好?还是专注一个领域好?

昨天,有位大一的同学私信我,说他要做全栈工程师。 我一听,这不害了孩子么,必须制止啊。 谁知,讲到最后,更确定了他做全栈程序员的梦想。 但凡做全栈工程师的,要么很惨,要么很牛! 但凡很牛的,绝不是一开始就是做全栈的! 全栈工程师听起来好听,但绝没有你想象的那么简单。 今天听我来给你唠,记得帮我点赞哦。 一、全栈工程师的职责 如果你学习编程的目的只是玩玩,那随意,想怎么学怎么学。...

不要再到处使用 === 了

我们知道现在的开发人员都使用 === 来代替 ==,为什么呢?我在网上看到的大多数教程都认为,要预测 JavaScript 强制转换是如何工作这太复杂了,因此建议总是使用===。这些都...

什么是a站、b站、c站、d站、e站、f站、g站、h站、i站、j站、k站、l站、m站、n站?00后的世界我不懂!

A站 AcFun弹幕视频网,简称“A站”,成立于2007年6月,取意于Anime Comic Fun,是中国大陆第一家弹幕视频网站。A站以视频为载体,逐步发展出基于原生内容二次创作的完整生态,拥有高质量互动弹幕,是中国弹幕文化的发源地;拥有大量超粘性的用户群体,产生输出了金坷垃、鬼畜全明星、我的滑板鞋、小苹果等大量网络流行文化,也是中国二次元文化的发源地。 B站 全称“哔哩哔哩(bilibili...

十个摸鱼,哦,不对,是炫酷(可以玩一整天)的网站!!!

文章目录前言正文**1、Kaspersky Cyberthreat real-time map****2、Finding Home****3、Silk – Interactive Generative Art****4、Liquid Particles 3D****5、WINDOWS93****6、Staggering Beauty****7、Ostagram图片生成器网址****8、全历史网址*...

终于,月薪过5万了!

来看几个问题想不想月薪超过5万?想不想进入公司架构组?想不想成为项目组的负责人?想不想成为spring的高手,超越99%的对手?那么本文内容是你必须要掌握的。本文主要详解bean的生命...

用了这个 IDE 插件,5分钟解决前后端联调!

点击上方蓝色“程序猿DD”,选择“设为星标”回复“资源”获取独家整理的学习资料!作者 |李海庆我是一个 Web 开发前端工程师,受到疫情影响,今天是我在家办公的第78天。开发了两周,...

大厂的 404 页面都长啥样?最后一个笑了...

每天浏览各大网站,难免会碰到404页面啊。你注意过404页面么?猿妹搜罗来了下面这些知名网站的404页面,以供大家欣赏,看看哪个网站更有创意: 正在上传…重新上传取消 腾讯 正在上传…重新上传取消 网易 淘宝 百度 新浪微博 正在上传…重新上传取消 新浪 京东 优酷 腾讯视频 搜...

自从喜欢上了B站这12个UP主,我越来越觉得自己是个废柴了!

不怕告诉你,我自从喜欢上了这12个UP主,哔哩哔哩成为了我手机上最耗电的软件,几乎每天都会看,可是吧,看的越多,我就越觉得自己是个废柴,唉,老天不公啊,不信你看看…… 间接性踌躇满志,持续性混吃等死,都是因为你们……但是,自己的学习力在慢慢变强,这是不容忽视的,推荐给你们! 都说B站是个宝,可是有人不会挖啊,没事,今天咱挖好的送你一箩筐,首先啊,我在B站上最喜欢看这个家伙的视频了,为啥 ,咱撇...

代码注释如此沙雕,会玩还是你们程序员!

某站后端代码被“开源”,同时刷遍全网的,还有代码里的那些神注释。 我们这才知道,原来程序员个个都是段子手;这么多年来,我们也走过了他们的无数套路… 首先,产品经理,是永远永远吐槽不完的!网友的评论也非常扎心,说看这些代码就像在阅读程序员的日记,每一页都写满了对产品经理的恨。 然后,也要发出直击灵魂的质问:你是尊贵的付费大会员吗? 这不禁让人想起之前某音乐app的穷逼Vip,果然,穷逼在哪里都是...

Java14 新特性解读

Java14 已于 2020 年 3 月 17 号发布,官方特性解读在这里:https://openjdk.java.net/projects/jdk/14/以下是个人对于特性的中文式...

前端还能这么玩?(女朋友生日,用前端写了一个好玩的送给了她,高兴坏了)

前端还能这么玩?(女朋友生日,用前端写了一个好玩的送给了她,高兴坏了)

爬虫(101)爬点重口味的

小弟最近在学校无聊的很哪,浏览网页突然看到一张图片,都快流鼻血。。。然后小弟冥思苦想,得干一点有趣的事情python 爬虫库安装https://s.taobao.com/api?_ks...

工作两年简历写成这样,谁要你呀!

作者:小傅哥 博客:https://bugstack.cn 沉淀、分享、成长,让自己和他人都能有所收获! 一、前言 最近有伙伴问小傅哥,我的简历怎么投递了都没有反应,心里慌的很呀。 工作两年了目前的公司没有什么大项目,整天的维护别人的代码,有坑也不让重构,都烦死了。荒废我一身技能无处施展,投递的简历也没人看。我是不动物园里的猩猩,狒狒了! 我要加班,我要996,我要疯狂编码,求给我个机会… ...

相关热词 c# 局部 截图 页面 c#实现简单的文件管理器 c# where c# 取文件夹路径 c# 对比 当天 c# fir 滤波器 c# 和站 队列 c# txt 去空格 c#移除其他类事件 c# 自动截屏
立即提问