后台运行脚本monitor.sh&--shell终端断开时停止运行脚本继续后台运行(monitor.sh&)--关闭shell终端,命令继续后台运行disown-h%1开机时执行脚本方案一:1.因为rc.local是在之后执行的全部初始化完成,我们就可以编写启动脚本了2.用root账号登录linux,vi/etc/rc.d/rc.local编辑文件,添加两行需要的脚本程序最后执行cd/home/test1--这一步必不可少,否则会提示没有权限打开'test.log'文件sutest1-c"p??ython/home/test1/test.py"--将要执行的命令作为参数传递给su方案二:1.init.d目录是一个可执行程序,它们实际上是服务脚本,按照一定的格式编写,Linux启动时会自动执行,类似于Windows服务2.用root账号登录,vi/etc/rc.d/init.d/mystart,添加如下内容:#!/bin/bash#chkconfig:23458005--指定执行哪些级别,一般为0为关机,6为重启,其他为正常启动。80为启动优先级,05为关机优先级#description:mystartserviceRETVAL=0start(){--启动服务的入口函数echo-n"mystartserive..."cd/home/test1sutest1-c"python/home/test1/test.py"}stop(){--关闭服务入口函数echo"mystartserviceisstopped..."}case$1in--Usingcase,可以进行交互操作start)开始;;stop)stop;;esacexit$RETVAL3.运行chmod+r/etc/rc.d/init.d/mystart,这样就可以直接执行了4.运行chkconfig--addmystart,将服务添加到配置中5运行chkconfig--listmystart,可以查看服务进程的状态汇总:两种方案的核心都是将用户切换为test1,然后执行命令启动Python程序。制作服务的好处是可以定义多个交互命令,比如:启动、停止、重启、重置……,你也可以在服务运行过程中做相应的操作。一开始按照大意写了如下脚本,但是执行不了:sutest1--switchtothetest1用户cd/home/test1--switchtotherootdirectorypythontest.py--executethepythonprogramexit--exitthetest1account,貌似一切正常,但是发现只执行了第一行命令,后面的都没有执行。直到退出了test1用户,我才发现好像执行完成了。分析原因,是因为linux是在root账户下启动的,执行sutest1就等于打开了一个新的shell脚本,所以下面的代码都是在等待新的shell脚本运行结束,就像在main中调用一样程序创建一个子程序,子程序是一个死循环。它一出来,后面的人就死定了。知道了发生的原因,解决方法就比较简单了,就是在执行上面的脚本程序的时候不要留下自己的Shell。我们可以将执行命令作为su的参数传递,因为不涉及打开新的shell,所以可以正常执行你期望的脚本程序,顺利开机后可以自动启动指定的脚本程序。
