首页 > 学院 > 操作系统 > 正文

进程在后台可靠运行的几种方法

2024-06-28 13:23:16
字体:
来源:转载
供稿:网友
进程在后台可靠运行的几种方法

Cron

a)linux系统下一个自动执行指定任务的程序,包含“时间”、“路径”、“自动执行脚本”等要素。它有如下特点:

  1. cron程序在安装系统后一般会自动随系统启动,无需每次人手启动;
  2. cron把命令行保存在/etc/crontab文件;
  3. cron服务器每分钟读取一次/etc/crontab的配置;

b)命令解析

  1.Cron启动、重启、关闭

    #servicecrondstart/restart/stop

  2.浏览已存在的Cron列表

    #crontab-l

  3.编辑当前用户的crontab,例如:

    1).99***/usr/local/bin/cvsb//表示每天早上9点9分执行目录/usr/local/bin/中的cvsb文件

    2).33**0/usr/local/bin/qbbak//表示每周日凌晨3时3分执行目录/usr/local/bin中的qbbak文件

    3).**/6***/usr/local/bin/esbbak //表示每6小时执行一次,执行时间从第一次执行起计算,当然也可以自定义执行时间,比如0*/6***那程序就会在整点执行

    4).20,30***/usr/local/bin/esbak//表示在每小时20分和30分时执行

    5)*23**2-5/usr/local/bin/esbbak//表示在星期二到星期五每天的23点执行

Daemon

a)运行在后台的一种特殊进程(守护进程),独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件。

b)Linux中专门提供了一个函数来完成这个daemon化的过程,这个函数的原型如下:intdaemon(int__nochdir,int__noclose);如果nochdir的值为0,则将切换工作目录为根目录;如果noclose为0,则将标准输入,输出和标准错误都重定向到/dev/null。

c)守护进程一般在系统启动时开始运行,除非强行终止,否则直到系统关机都保持运行;

d)守护进程经常以超级用户(root)权限运行,因为它们要使用特殊的端口(1-1024)或访问某些特殊的资源。

e)守护进程的工作就是打开一个端口,并且监听(Listen)等待客户连接。如果客户端产生一个连接请求,守护进程就创建(Fork)一个子服务器响应这个连接,而主服务器继续监听其他的服务请求。

  1. Nohup

a)在要处理的命令前加上nohup即可,标准输出和标准错误缺省会被重定向到nohup.out文件中。

b)在结尾中加上"&"来将命令同时放入后台运行。例如:nohuppingwww.ibm.com&

  1. Supervisor

a)应用程序需要24小时不间断运行。这时可使用supervisor监控应用程序的进程。当发生应用程序内部错误退出、进程被杀死等情况时,自动重启应用程序。

b)安装supervisor

  1. 安装setuptools$sudoapt-getinstallpython-setuptools
  2. 使用easy_install安装supervisor:$sudoeasy_installsupervisor安装完成后出现:/usr/bin/supervisord--supervisor守护进程/usr/bin/supervisorctl--supervisor服务控制程序

c)配置supervison

  1. 将配置文件显示在控制台:$echo_supervisord_conf
  2. 生成配置文件:$sudoecho_supervisord_conf>/etc/supervisord.conf
  3. 在当前目录生成配置文件:$echo_supervisord_conf>supervisord.conf
  4. 配置需要运行的程序,在配置文件中追加:[PRogram:helloworld]command=./helloworld;执行命令process_name=%(program_name)sautostart=true;程序是否随supervisor启动而启动autorestart=true;程序停止时,是否自动重启startsecs=10

d)启动

  1. 开启supervisor$supervisord-csupervisord.conf
  2. 开启/停止服务#servicesupervisord[start|stop]
  3. 开启/停止某个程序#supervisorctl[start|stop][program名称]//在supervisord.conf中定义的
  4. 查看进程状态$supervisorctlstatus

e)添加supervisord为Linux系统服务,开机自动启动

  将supervisord.conf拷贝到/etc目录下

  启动脚本supervisord.sh

  #!/bin/sh

  #

  #/etc/rc.d/init.d/supervisord

  #

  #Supervisorisaclient/serversystemthat

  #allowsitsuserstomonitorandcontrola

  #numberofprocessesonUNIX-likeOperating

  #systems.

  #

  #chkconfig:-6436

  #description:SupervisorServer

  #processname:supervisord

  #Sourceinitfunctions

  ./etc/rc.d/init.d/functions

  prog="supervisord"

  prog_bin="/usr/local/bin/supervisord"

  PIDFILE="/tmp/supervisord.pid"

  start()

  {

  echo-n$"Starting$prog:"

  #Sourceinitfunctions

  ./etc/rc.d/init.d/functions

  prog="supervisord"

  prog_bin="/usr/local/bin/supervisord"

  PIDFILE="/tmp/supervisord.pid"start()

  {

  echo-n$"Starting$prog:"

  daemon$prog_bin--pidfile$PIDFILE

  [-f$PIDFILE]&&success$"$progstartup"||failure$"$progstartup"

  echo

  }

  stop()

  {

  echo-n$"Shuttingdown$prog:"

  [-f$PIDFILE]&&killproc$prog||success$"$progshutdown"

  echo

  }

  case"$1"in

  start)

  start

  ;;

  stop)

  stop

  ;;

  status)

  status$prog

  ;;

  restart)

  stop

  start

  ;;

  *)

  echo"Usage:$0{start|stop|restart|status}"

  ;;

  esac

添加为系统服务

#mvsupervisord.sh/etc/init.d/supervisord

#chkconfig--addsupervisord

#chkconfig--level345supervisordon

  1. Screen

a)Screen是一个可以在多个进程之间多路复用一个物理终端的窗口管理器。

b)Screen命令

  1. 开启一个screen:[root@tivf06~]#screen
  2. 命名screen,例如命名一个testscreen:[root@TS-DEV~]#screen-Sscreen
  3. 关闭一个screen:Ctrl-a,d
  4. 查看所有的screen:[root@TS-DEV~]#screen-ls
  5. 重新连接screen:[root@TS-DEV~]#screen-r12865
  6. 清楚deadscreen:[root@TS-DEV~]#screen-wipe


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表