nohup脚本
‘壹’ jenkins上使用shell脚本nohup部署jar服务到remote服务器
先贴一下,我的jenkins里最后核心配置
remove_jar.sh脚本:
start_jar.sh脚本内容:
remove_jar.sh 和 start_jar.sh 在jenkins服务器上,需要将这两个shell在0.0.0.0(不能暴露)的远端去执行
没错,客官您一眼就看出来了派行,觉得简单的不值一提吧,先别着急,对搜这个问题的滑岁小菜鸡来说这里面也是大有文章,听我一一道来。
1、第一个问题:ps -ef|grep xxx.jar查到多余的pid
现象:在0.0.0.0上行 ps -ef | grep alk-wxapi-test.jar | grep -v grep | awk '{print $2}' 只能查到一个pid,但是把这句话放到shell脚本里,在本地使用命令上远端执行,就会找到3个pid,而且kill 时提示失败的错误。
现在已经知道原因了,但是当时确实是个问题。
已经解决不方便复现了,因此就描述一下就行了。
原因:shell里的这个命令也是通过bash在远程执行的,所以找到的别的 无关紧要 的pid其实是bash,因此在grep是除了排除grep本身( grep -v grep )外还要排除bash( grep -v bash )
最后命令是:
2、远程执行脚本,里面有nohup java -jar,发生错误: nohup: failed to run command ‘java’: No such file or directory
这是因为nohup时java环境变量没有读到,处理方式就是在nohup执行前加入
3、其他思路
4、第二条说jdk的路径因为每个服务企业都不一样,所以需要手动传改,这一点已经在脚本上做了修改,启动脚本上信羡睁携带的第一个参数就是jdk的安装路径
这两个也都是比较好的思路,以后肯定有机会体验的,本篇到此。
ps -ef |grep -v 在shell sh 脚本中貌似无效?
linux下搭建zookeeper集群遇到的坑
nohup: cannot run command异常解决
Zookeeper not starting, nohup error
‘贰’ SaltStack 解决执行 nohup 启动脚本 hang 住不能退出的问题
saltstack 执行 cmd.run python 服务,会 hang 住。
但应用服务器上的服务是启动了。
使用 -l debug 参数启用 saltstack debug 日志,可以看到是因为 xx-xxxxx-service_start.sh 启动脚本没有返回执行结果给 saltstack,导致 saltstack 一直在等待返回结耐粗袭果。
查看 xx-xxxxx-service_start.sh 启动脚本,可以知道 python 服务是直接 nohup python manage.py runserver 0.0.0.0:25074 & 启动的,saltstack 无法正确处理这条命令。
原因是 nohup python manage.py runserver 0.0.0.0:25074 & 方式启动, 还会生成一个 nohup.out 文件 ,启动运行日志都会持续输凳禅出到此文件。导致的问题就是,命令还在运行中,没有退出,所以没有返回结果给 saltstack。
解决办法:
方式一:
修改脚本,nohup 配合 >/dev/null 2>&1 使用,就可以解决。
方式二:
利用 uwsgi 或者其他 python web server(gunicorn 等) 或者 systemctl 来后昌兄台运行 python 服务,由这些服务返回结果给 saltstack。
‘叁’ nohup执行python脚本看不到log
python的输出有缓冲伏则亩,导致log并不能盯逗够马上看到输出。
-u参数,使得python不启用缓冲。
所以修改缺森命令即可:nohup python -u test.py > log &
nohup送入后台运行:
nohup python -u train_lanenet.py >nohup 2>&1 &
# 使用第一张到第三张GPU卡
import os
os.environ["CUDA_VISIBLE_DEVICES"] = "1,2,3"
‘肆’ Linux shell脚本 nohup问题求助
你不应该放在profile,每个用户登录都会运行一次的。你确定hosts文件在mali目录下?不是mail?
另外你应该把这段代码写成脚本 在profile中以nohup 加后台的方式运行这个脚本。
比如 保存到/etc/init_kafka
然后在 profile中添加
nohup /etc/init_kafaka &
‘伍’ nohup执行,脚本怎么自
在脚本nohup设置每天开始拷贝日志作为扰告前一天的日志备份,然后把当前日志清前袭空即可,代码如下:crontab -e//增加:0 0 * * * cp /dirname/logfile.log /bakdir/慧李兄logfile.`date -d yesterday +%Y%m%d`.log; cat /dev/null > /dirname/logfile.log//每周日凌晨1:00打包、删除文件:0 1 * * 0 cd /bakdir; find ./ +mtime 7 -exec tar cvf logfile.`date -d yesterday +%Y%U`.tar {} \; ;find ./ -mtime 91 -exec rm -f {} \;
‘陆’ python nohup
后台运行
nohup指不断地运行,是no hang up的缩写,指不间断,不挂断。运行一个进程的时候,不想让其在你退出账号时关闭,即可用nohup。
nohup在不规定的情况下,所以输出内容会到nohup.out中
0 表示stdin标准输入,用户键盘输入的内容
1 表示stdout标准输出,输出到显示屏的内容
2 表示stderr标准错误,报错内容
2>&1是一个咐缓数整体,>左右不能有空格,即将错误内容重定向输入到标准输出中去。
&为后台运行
nohup python dev_run.py >> ./run.log 2>&1 &衡首, 以python环哪轮境不间断的运行dev_run.py这个脚本,并且将脚本输出的内容重定向输入run.log中(>>意为追加,如果用>会让其中的内容清空)
requirements 添加了PyMysql >= 1.0.2之后
使用escape_string报错:ImportError: cannot import name 'escape_string' from 'pymysql'。
解决方法:
https://blog.csdn.net/weixin_42840933/article/details/85780125
https://www.linuxprobe.com/linux-nohup.html
https://www.jianshu.com/p/b77d934cc252
https://blog.csdn.net/coco56/article/details/107430933
‘柒’ Lunix运行脚本、任务(sh、nohup、qsub)
产生日志:
sh **.sh &> xx.log
不产生日志:
sh **.sh > /dev/null 2>&1 &
nohup:no hang up 的缩写,就是不挂断的意思 。
nohup命令:如果你正在运行一个进程,而且你觉得在退出帐户时该进程还不会结束,那么可以使用nohup命令。 该命令可以在你退出帐户/关闭终端之后继续运行相应的进程。 在缺省情况下该作业的所有输出都被重定向到一个名为nohup.out的文件中。
使用权限:所有使用者
语法格式
nohup Command [ Arg … ] [& ]
参数说明:
Command :要执行的命令。
Arg :一些参数,可以指定输出文件。
& :让命令在后台执行,终端退出后命令仍旧执行。
实例
以下命令在后台执行 root 目录下的 runoob.sh 脚本:
nohup /root/runoob.sh &
在终端如果看到以下输出说明运行成功:
appending output to nohup.out
这时我们打开 root 目录 可以看到生成了 nohup.out 文件。
如果要停止运行,你需要使用以下命令查找到 nohup 运行脚本到 PID,然后使用 kill 命令来删除:
ps -aux | grep "runoob.sh"
参数说明:
a : 显示所有程序
u : 以用户为主的格式来显示
x : 显示所有程序,不区分终端机
另外也可以使用 ps -def | grep "runoob.sh" 命令来查找。
找到 PID 后,就可以使用 kill PID 来删除。
kill -9 进程号PID
以下命令在后台执行 root 目录下的 runoob.sh 脚本,并重定向输入到 runoob.log 文件:
nohup /root/runoob.sh > runoob.log 2>&1 &
2>&1 解释:将标准错误 2 重定向到标准输出 &1 ,标准输出 &1 再被重定向输入到 runoob.log 文件中。
0 – stdin (standard input,标准输入)
1 – stdout (standard output,标准输出)
2 – stderr (standard error,标准错误输出)
实时监测日志输出内容命令:tail
tail 命令是nohup命令的好搭档。配合-f参数,可以实时监视向日志文件增加的信息。
tail -f myout.log
tail -f 等同于–follow=descriptor,根据文件描述符进行追踪,当文件改名或被删除,追踪停止
tail -F 等同于–follow=name --retry,根据文件名进行追踪,并保持重试,即该文件被删除或改名后,如果再次创建相同的文件名,会继续追踪
tailf 等同于tail -f -n 10,与tail -f不同的是,如果文件不增长,它不会去访问磁盘文件,所以tailf特别适合那些便携机上跟踪日志文件,因为它减少了磁盘访问,可以省电。
监测程序是否在正常运行中:ps
ps命令也可以和nohup命令配合使用,用于显示当前进程 (process) 的状态。可以监视后台程序是否在正常运行中或者已经挂掉。
ps -ef|grep yourcommand # -ef 参数显示所有命令,连带启动时的命令行参数
qsub命令用来从登陆节点上向计算节点进行任务投递。前提是在服务器上有集群管理工具分配计算节点等。SGE(SGE, Sun Grid Engine)集群管理工具可以用来提交批处理作业,SGE支持单或多节点作业,它将用户投递的任务进行排队,然后将任务交给能够运行的结算节点执行,工作流程可以分为四步:接受用户投放的任务;在任务运行以前,将任务放到一个存储区域;发送任务到一个执行设备,并监控任务的运行;运行结束写回结果并记录运行日志。
qsub [ options ] [ command | -- [ command_args ]]
1. -@ optionfile (contains all valid options) 就是把qsub命令的可选项组合成一定功能的语句,保存在一个文件中。 qsub -a optionfilename jobfilename
2. -a date_time 设置作业什么时候可以执行。 格式:CC YY MMDDHHMM.SS 如 201109272213.21 qsub -a 201109272213.21 ../simplejob
3. -A account_string Identifies the account to which the resource consumption of the job should be charged 设置一个作业的账户名,便于统计该账户使用的资源等信息 qsub -A testaccountname jobname
4. -ac 添加名/值对到作业上下文 -dc 删除。。 -sc 设置(修改)。。 Contexts provide a way to dynamically attach and remove meta- information to and from a job. The context variables are not passed to the job's execution context in its environment The outcome of the evaluation of all -ac, -dc, and -sc options or corresponding values in qmon is passed to defined JSV instances as parameter with the name -ac.
5. -ar ar_id 分配已提交作业,作为它的一部分,给已存在预约。ar=advance reservation qsub -ar 60 jobname #ai_di = unsigned integer
6. -b y[es]|n[o] Gives the user the possibility to indicate explicitly whether command should be treated as binary or script.
7. -binding 等待理解
8. -c occasion_specifier(际符) 定义或者重定义作业是否要被检查,if是,在什么环境下。 n no checkpoint is performed. s checkpoint when batch server is shut down. m checkpoint at minimum CPU interval. x checkpoint when job gets suspended. <interval> checkpoint in the specified time interval. qsub -c n jobname
9. -C prefix_string 前缀字符串定义一个在作业命令中的指令 qsub -C "#$" ../simplejob
10. -ckpt ckpt_name 选择检查点环境来检查一个作业,同时声明这个作业是检查点作业。 qsub -ckpt allanckpt ../simplejob
11. -clear 重置作业的所有元素为初始默认状态 qsub -clear ../simplejob
12. -cwd =current working directory 从当前的目录开始执行作业。如果有相应的配置文件的话, 这个命令将启动网格引擎的路径别名设备。
13. -dl date_time 设置作业在deadline之前执行完,格式为CC YYU MMDDHHMM.SS qsub -dl 201101131159.01 ../simplejob
14. -e [[hostname]:]path,...定义或重新定义作业的标准错误流使用的路径 e=stderror
15. -h | -h {u|s|o|n|U|O|S}... h=hold 暂停作业执行 'u' .........user hold. `s' denotes a system hold. `o' denotes a operator hold. `n' denotes no hold (requires manager privileges). `U' removes a user hold. `S' removes a system hold. `O' removes a operator hold. qsub -h ../simplejob(qsub只能使用-h)
16. -l resource=value,... l=launch 启动满足资源需求的作业 Launch the job in a Grid Engine queue meeting the given resource request list. In case of qalter the previous definition is replaced by the specified one. qsub -l s_core=5 ../simplejob
17. -q wc_queue_list 定义或重定义可能用来执行作业的队列,包括群聚队列、队列域、队列实例。 qsub -q all.q ../simplejob
18. -hard 表示该作业在安排执行之前,作业的资源需求必须满足。 qsub -hard ../simplejob
19. -soft 表示该作业在安排执行之前,作业的资料需求可以有、但不必须有。 qsub -soft ../simplejob
20. -help 获取帮助 qsub -help
21. -hold_jid wc_job_listt 定义或重定义当前提交的作业对哪些作业有依赖,所依赖的作业使用通配符作业清单表示:wc_job_list qsub -hold_jid 63926 ../simplejob
22. -hold_jid_ad wc_job_list ad=array dependency list of the submitted job 定义或者重定义组作业依赖列表。 qsub -hold_jid_ad 1-1200
23. -t n[-m[:s]] 指定组作业的数量,将指示器与作业关联 qsub -t 1-1200 ../simplejob
24. -i [[hostname]:]file,... 定义或重定义一个文件为作业的标准输入流 qsub -i stdin job
25. -j y[es]|n[o] 指定作业的标准错误流是否合并到标准输出流,如果-j y 和-e都存在的话,SGE将忽略后者。 qsub -j y ../simplejob
qstat -f # 查看用户任务
qstat -j jobId # 按任务id查看
qstat -explain a|c|A|E -j jobID # 查看任务任务并给出解释
qstat -u user # 按用户查看
qw: 表示等待状态
hqw: 任务挂起等待中,待依赖的任务完成后执行
Eqw: 投递任务出错
r: 表示任务正在运行
s: 暂时挂起
dr: 节点挂了之后,删除任务就会出现这个状态,只有节点重启之后,任务才会消失
qdel -j 1111 删除任务号为1111的任务
qdel -u AAA 删除AAA投递的所有任务
欢迎大家交流心得~~~3QU!!!...........
---------------------------------------------------------------------------------------------------------I am a line !----------------------------------------------------------------------------------------------