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

Cron

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

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

b) 命令解析

  1.Cron启动、重启、关闭

    #service crond start/restart/stop

  2.浏览已存在的Cron列表

    #crontab -l

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

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

    2).3 3 * * 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化的过程,这个函数的原型如下:int daemon( 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) 在结尾中加上"&"来将命令同时放入后台运行。例如:nohup ping www.ibm.com &

  1. Supervisor

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

b) 安装supervisor

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

c) 配置supervison

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

d) 启动

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

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

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

  启动脚本 supervisord.sh

  #!/bin/sh

  #

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

  #

  # Supervisor is a client/server system that

  # allows its users to monitor and control a

  # number of processes on UNIX-like operating

  # systems.

  #

  # chkconfig: - 64 36

  # description: Supervisor Server

  # processname: supervisord

  # Source init functions

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

  prog="supervisord"

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

  PIDFILE="/tmp/supervisord.pid"

  start()

  {

  echo -n $"Starting $prog: "

  # Source init functions

  . /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 $"$prog startup" || failure $"$prog startup"

  echo

  }

  stop()

  {

  echo -n $"Shutting down $prog: "

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

  echo

  }

  case "$1" in

  start)

  start

  ;;

  stop)

  stop

  ;;

  status)

  status $prog

  ;;

  restart)

  stop

  start

  ;;

  *)

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

  ;;

  esac

添加为系统服务

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

# chkconfig --add  supervisord

# chkconfig --level 345 supervisord on

  1. Screen

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

b) Screen命令

  1. 开启一个screen:                                        [[email protected] ~]# screen
  2. 命名screen,例如命名一个test screen:                    [[email protected] ~]# screen -S screen
  3. 关闭一个screen:Ctrl-a,d
  4. 查看所有的screen:                                   [[email protected] ~]# screen -ls
  5. 重新连接screen:                                     [[email protected] ~]# screen -r 12865
  6. 清楚dead screen:                                   [[email protected] ~]# screen -wipe
时间: 2024-08-26 16:40:18

进程在后台可靠运行的几种方法的相关文章

Linux 技巧:让进程在后台可靠运行的几种方法

让进程在后台可靠运行的几种方法 http://www.ibm.com/developerworks/cn/linux/l-cn-nohup/ 想让进程在断开连接后依然保持运行?如果该进程已经开始运行了该如何补救? 如果有大量这类需求如何简化操作? 我们经常会碰到这样的问题,用 telnet/ssh 登录了远程的 Linux 服务器,运行了一些耗时较长的任务, 结果却由于网络的不稳定导致任务中途失败.如何让命令提交后不受本地关闭终端窗口/网络断开连接的干扰呢?下面举了一些例子, 您可以针对不同的场

让进程在后台可靠运行的几种方法 nohup,setsid,&,disown,CTRL-z ,screen

让进程在后台可靠运行的几种方法 几年前在developerWorks上面看到的文章,感觉非常实用,又简单整理了一下,转到这里,希望给看到的人带来一些帮助.文中提到的nohup和subshell方式一直在使用. 我们经常会碰到这样的问题,用 telnet/ssh 登录了远程的 Linux 服务器,运行了一些耗时较长的任务, 结果却由于网络的不稳定导致任务中途失败.如何让命令提交后不受本地关闭终端窗口/网络断开连接的干扰呢?下面举了一些例子, 您可以针对不同的场景选择不同的方式来处理这个问题. 如果

Linux 技巧:让进程在后台可靠运行的几种方法【转】

我们经常会碰到这样的问题,用 telnet/ssh 登录了远程的 Linux 服务器,运行了一些耗时较长的任务, 结果却由于网络的不稳定导致任务中途失败.如何让命令提交后不受本地关闭终端窗口/网络断开连接的干扰呢?下面举了一些例子, 您可以针对不同的场景选择不同的方式来处理这个问题. nohup/setsid/& 场景: 如果只是临时有一个命令需要长时间运行,什么方法能最简便的保证它在后台稳定运行呢? hangup 名称的来由 在 Unix 的早期版本中,每个终端都会通过 modem 和系统通讯

[Linux]让进程在后台可靠运行的几种方法

想让进程在断开连接后依然保持运行?如果该进程已经开始运行了该如何补救? 如果有大量这类需求如何简化操作? 我们经常会碰到这样的问题,用 telnet/ssh 登录了远程的 Linux 服务器,运行了一些耗时较长的任务, 结果却由于网络的不稳定导致任务中途失败.如何让命令提交后不受本地关闭终端窗口/网络断开连接的干扰呢?下面举了一些例子, 您可以针对不同的场景选择不同的方式来处理这个问题. nohup/setsid/& 场景: 如果只是临时有一个命令需要长时间运行,什么方法能最简便的保证它在后台稳

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

原文地址:http://www.ibm.com/developerworks/cn/linux/l-cn-nohup/ 原文作者:申毅 我们经常会碰到这样的问题,用 telnet/ssh 登录了远程的 Linux 服务器,运行了一些耗时较长的任务, 结果却由于网络的不稳定导致任务中途失败.如何让命令提交后不受本地关闭终端窗口/网络断开连接的干扰呢?下面举了一些例子, 您可以针对不同的场景选择不同的方式来处理这个问题. nohup/setsid/& 场景: 如果只是临时有一个命令需要长时间运行,什

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

想让进程在断开连接后依然保持运行?如果该进程已经开始运行了该如何补救? 如果有大量这类需求如何简化操作? 我们经常会碰到这样的问题,用 telnet/ssh 登录了远程的 Linux 服务器,运行了一些耗时较长的任务, 结果却由于网络的不稳定导致任务中途失败.如何让命令提交后不受本地关闭终端窗口.网络断开连接的干扰呢? 下面举了一些例子, 您可以针对不同的场景选择不同的方式来处理这个问题. nohup/setsid/& 场景 如果只是临时有一个命令需要长时间运行,什么方法能最简便的保证它在后台稳

Linux 技巧:让进程在后台可靠运行的几种方法(转)

我们经常会碰到这样的问题,用 telnet/ssh 登录了远程的 Linux 服务器,运行了一些耗时较长的任务, 结果却由于网络的不稳定导致任务中途失败.如何让命令提交后不受本地关闭终端窗口/网络断开连接的干扰呢?下面举了一些例子, 您可以针对不同的场景选择不同的方式来处理这个问题. nohup/setsid/& 场景: 如果只是临时有一个命令需要长时间运行,什么方法能最简便的保证它在后台稳定运行呢? hangup 名称的来由 在 Unix 的早期版本中,每个终端都会通过 modem 和系统通讯

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

1. nohup nohup 无疑是我们首先想到的办法.顾名思义,nohup 的用途就是让提交的命令忽略 hangup 信号. nohup 的使用是十分方便的,只需在要处理的命令前加上 nohup 即可,标准输出和标准错误缺省会被重定向到 nohup.out 文件中.一般我们可在结尾加上"&"来将命令同时放入后台运行,也可用">filename 2>&1"来更改缺省的重定向文件名. nohup 示例 [[email protected]~

Linux 技巧:让进程在后台可靠执行的几种方法

我们常常会碰到这种问题.用 telnet/ssh 登录了远程的 Linux server,执行了一些耗时较长的任务, 结果却因为网络的不稳定导致任务中途失败.怎样让命令提交后不受本地关闭终端窗体/网络断开连接的干扰呢?以下举了一些样例, 您能够针对不同的场景选择不同的方式来处理这个问题. nohup/setsid/& 场景: 假设仅仅是暂时有一个命令须要长时间执行.什么方法能最简便的保证它在后台稳定执行呢? hangup 名称的来由 在 Unix 的早期版本号中,每一个终端都会通过 modem