当前位置:  技术问答>linux和unix

Linux加载后台程序

    来源: 互联网  发布时间:2016-05-17

    本文导语:  我是Linux新手,应BOSS要求 写了个监控程序。 现在需要在Linux服务器上开机自启动这个监控程序,有什么可行的方法? 具体描述:         由于是监控程序自然是在服务器启动到关闭一直运行的,表现为服务器启...

我是Linux新手,应BOSS要求 写了个监控程序。
现在需要在Linux服务器上开机自启动这个监控程序,有什么可行的方法?
具体描述:
        由于是监控程序自然是在服务器启动到关闭一直运行的,表现为服务器启动后,这个程序就像服务一样启动,不影响其他任务的执行。
希望前辈达人们能提供确实可行的方法,越详细越好,实践成功,全额分赠送!
(本人尝试了编辑rc.local文件,以及在init5.d文件夹中ln建立连接的方法,启动是启动了,但是系统卡在那里不动,根本出现不了系统登陆界面)

|
1、使用crond监控程序运行程序不可以吗?
2、使用at命令定期运行程序不可以吗?
3、batch命令处理批处理任务不可以吗?


为什么要那么麻烦?



一、 使用crond监控程序运行程序

1. 使用cron来定期执行任务
使用crond (cron监控程序)来定期运行一些任务,比如备份日志、数据库、把日志发送到自己邮箱等等操作都可以又定期运行程序来完成。
crond是个脚本,每次Linux启动的时候都自动起到该脚本,该脚本是 /etc/rc.d/init.d 下面的,每次系统启动的时候就自动会启动该目录下

的脚本。
cron有两个配置文件,一个/etc/crontab,是一个全局配置文件,一组是crontab命令生成生成的配置文件,是属于用户级的。

一般对管理员来说,只要使用全局配置的/etc/crontab就配置文件就可以了,我们去打开配置文件看看:

SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/

# run-parts
01 * * * * root run-parts /etc/cron.hourly
02 4 * * * root run-parts /etc/cron.daily
22 4 * * 0 root run-parts /etc/cron.weekly
42 4 1 * * root run-parts /etc/cron.monthly

我们稍微来分析一下这个文件:

/* 设置基于什么shell来运行,我们这里是基于bash shell */
SHELL=/bin/bash

/* 指定目录中有次文件的命令时,不需要完整目录路经 */
PATH=/sbin:/bin:/usr/sbin:/usr/bin

/* 使用cron实际工作时,见通过邮件来同志root用户 */
MAILTO=root

/* 与/etc/crontab配置文件相关的主目录为根目录 */
HOME=/

/* 好了,这里是关键是,下面的是要指定什么时间运行什么目录下的任务,run-parts命令是运行指定目录下的每个脚本 */
# run-parts

/* 这一句是在每天每小时过后一分钟运行/etc/cron.hourly目录中的每个脚本文件 */
01 * * * * root run-parts /etc/cron.hourly

/* 在每天凌晨4点2分运行/etc/cron.daily目录中的每个脚本文件 */
02 4 * * * root run-parts /etc/cron.daily

/* 在每个星期天凌晨4点22分运行/etc/cron.weekly目录中的每个脚本文件 */
22 4 * * 0 root run-parts /etc/cron.weekly

/* 在每个月的第一天凌晨4点42分运行/etc/cron.monthly目录中的每个脚本文件 */
42 4 1 * * root run-parts /etc/cron.monthly

大家看到里面的"*"一定觉得很奇怪,下面我们句稍微来了解一下cron的语法:
上面脚本中的时间是从左到右的,分别列出了五个字段,我们看下面的表:

------------------------------------------------
字段 取值范围
------------------------------------------------
Minute 0 ~ 59
Hour 0 ~ 23,其中0是午夜,20是晚上8点
Day 1 ~ 31
Month 1 ~ 12
Day of week 0 ~ 7,其中0和7是表示星期天
------------------------------------------------

任何字段中的星号是通配符,例如,如果第一个字段包括星号,则特定若无其事在可能的每一分钟运行。如果要指定时间范围,比如上午8点到

下午4点,则可以见第二个字段设置为8~16。如果要隔一天运行任务,则可以将第三个字段设置为*/2。可以看出,如果五个字段(minute、hour

、day、month、day of week) 之后,cron中的每个字段就没什么神秘之处了。


2. 用户自己的cron
用户也可以计划用户自己的cron任务,比如他想要在半夜整理他的文件,然后发送邮件给自己,只要这个用户他没有在/etc/cron.deny表中,

就可以使用crontab -e命令来启动自己的cron文件。

3. 对cron的访问控制
默认情况下,所有用户都能访问cron工具,要对cron进行访问控制,则可以生成/etc/cron.allow与/etc/cron.deny文件。
(1)这两个文件都不存在时,每个用户都可以访问cron工具]
(2)存在/etc/cron.allow文件时,则只有cron.allow文件中允许的用户才能访问cron工具,如果也有/etc/cron.deny文件,则忽略cron.deny文





二、 使用at命令定期运行程序

1. 使用cron运行任务
cron任务的缺点是计划要经常运行,假如我们只是想要让特定任务运行一次呢?那么,这时候就要用到at监控程序了。
设置at命令很简单,指示定运行的时间,那么就会在哪个时候运行。at类似打印进程,会把任务放到/var/spool/at目录中,到指定时间运行它
。at命令相当于另一个shell,运行at time命令时,它发送一个个命令,可以输入任意命令或者程序。at now + time命令可以在指示任务。

假设处理一个大型数据库,要在别人不用系统时去处理数据,比如凌晨2点5分。那么我们就应该先建立/home/mj/airplane脚本管理数据库,计

划处理/home/mj/air-safe文件中的结果。正常方式是这样启动下列命令:

# at 2:05 tomorrow
at> /home/mj/airplane > /home/mj/air-safe
at> Ctrl+D

AT Time中的时间表示方法
-----------------------------------------------------------------------
时间 例子 说明
-----------------------------------------------------------------------
Minute at now + 5 minutes 任务在5分钟后运行
Hour at now + 1 hour 任务在1小时后运行
Days at now + 3 days 任务在3天后运行
Weeks at now + 2 weeks 任务在两周后运行
Fixed at midnight 任务在午夜运行
Fixed at 10:30pm 任务在晚上10点30分开始
Fixed at 1:00 12/20/04 任务在2004年12月20日凌晨1点开始
-----------------------------------------------------------------------

2. 查看目前在等待执行的任务
输入任务后,可以使用atq命令可以看到目前等待执行的任务,输出提供了任务号、用户和任务执行时间等信息。

# atq
8 2004-12-15 02:05 a mj

里面的a表示是at任务还是batch命令生成的任务。

3. 删除at任务
删除一个at任务比较简单,使用atrm命令就可以轻松解决。
比如我知道了任务的队列号,那么就可以删除它:

# atrm 8

就删除了队列号为8的at任务了。


三、batch命令处理批处理任务

这个具体就不说了,该命令类似 at -q b

Crontab命令使用的文件具体位置: /Var/Spool/Cron/Crontabs 目录下,每个用户都有其对应的名字,比如,root用户的文件为root.

直接登陆窗口界面
# crontab -l root file://查看作业
/etc/init.d/cron stop file://停止进程
在CONSOLE 中熟命令 crontab -e root
crontab -e root file://编辑加入要执行的代码
0-59 * * * * date >> /export/home/keven/keven.txt file://加入次行在末尾,每分钟执行一次

"格式如下:
  (1)  (2)  (3)  (4)  (5)  (6)
   0   0   *   *   3   date >> /export/home/keven/keven.txt
      1. 分钟 (0-60)
      2. 小时 (0-23)
      3. 日 (1-31)
      4. 月 (1-12)
      5. 星期 (0-6)
      6. 所要运行的程序
如1-59分钟,1-24 小时

0 18-23 0 0 0-6 file://每天的18-23点执行,0-6为周日到周六

/etc/init.d/crond(Linux为crond sunos为cron) start file://启动进程
# crontab -l root
查看作业是否加入执行队列。
不行退出到登陆界面,再次登陆进入,还加载就reboot


你是不是直接编辑用户的cron文件呀?
如果是当然不运行,cron demon是在启动的时候才读一次配置文件.
如果你是后加的JOB 要用crontab -e来编辑用户的cron.
要不你 kill -HUP cron的进程ID.
重新启动这个进程.
每5分钟做一次必须写成5,15,20,25,30,35,40,45,50,55 * * * *
===================================
"格式如下:
  (1)  (2)  (3)  (4)  (5)  (6)
   0   0   *   *   3   /usr/bin/updatedb
      1. 分钟 (0-60)
      2. 小时 (0-23)
      3. 日 (1-31)
      4. 月 (1-12)
      5. 星期 (1-7)
      6. 所要运行的程序
但是我设成 1 0 0 0 0 /usr/bin/ps
希望能自动在一分钟之后显示进程。但是没有成功。
HELP ME

===============================================
15 1 * * * /opt/bin/ta.sh /opt/aadir > /dev/null

此处>/dev/null 必须用吗? 何意思?
输出重定向到/dev/null, 否则会mail到你的邮箱
dev/null 是一个特殊文件,所有输入到该文件的数据都会被丢弃。
> /dev/null 的意思就是丢弃所有的输出内容,否则就会将输出内容发送到执行该命令的用户信箱中。
这种写法只能把标准输出送到/dev/null中,如果有错误产生的话,还是会送到信箱里的。下面的写法才可以丢弃所有的输出内容:
15 1 * * * /opt/bin/ta.sh /opt/aadir > /dev/null 2>&1

|
这说明你自己的程序有问题。
你的程序本身是按照daemon进程设计的吗?
如果不是的话可以man daemon,或者搜索一下daemon进程。
另外直接连接到init.d目录下的做法也不妥。你也需要写一个脚本放到init.d下面,写法可以参照这个目录下的其它脚本。
另外你还需要学习一下service和chkconfig这个两个命令,具体可以看man手册。

|
随系统启动应该加到/etc/rc*.d目录中去,名字要按照规范起。
用户登录可以放到用户的.profile或者用户默认shell的.文件中,
例如csh就建立一个.cshrc文件。
程序后台运行就要加在程序后面加&符号。
如果希望用户退出登陆程序继续运行,则使用nohup命令。
例如:
nohup ./your_shell.sh &
就可以了。

|

你man daemon了吗?
或者你可以看看unix环境高级编程这本书,里面有一章专门讲怎么做后台程序。

    
 
 

您可能感兴趣的文章:

  • linux中怎么使后台进程的输出至控制终端?
  • 如何停止Linux的后台服务
  • 关于Linux后台进程【nohup】
  • Linux如何将后台进程调到前台来
  • linux下如何暂停后台运行的程序
  • 请教!关于linux下的后台程序的开发。
  • 找啊,找朋友,找到一个好朋友。。。(linux后台开发)
  • 刚开始用linux写程序,问个简单的后台运行问题
  • 菜鸟求助:Linux 应用程序后台启动后关闭窗口程序退出
  • Linux后台压缩命令
  • Linux 开发一个后台运行服务
  • linux后台运行程序问题
  • linux后台运行程序的问题
  • linux shell脚本不重复在后台运行,急急急
  • linux 下后台进程的编写
  • 后台服务开发库 Linux sails
  • linux c++服务器后台开发要学些什么?(介绍点书)
  • linux下如何做一个程序在后台运行.
  • linux如何向后台终端shell当前光标处送入字符串
  • 应届生咨询关于linux后台开发~~
  • Linux下c函数dlopen实现加载动态库so文件代码举例
  • 请教一下Linux的动态库加载方式(是启动加载还是运行加载?)
  • Linux下指定运行时加载动态库路径及shell下执行程序默认路径
  • 要写一个Linux下的elf加载器需要哪些知识?
  • linux网卡驱动加载异常
  • linux下获取动态库的加载路径
  • linux 启动加载项
  • linux2.6内核 如何自动加载当前所需要的模块
  • 我用linux9怎么加载不了usb啊.....
  • 虚拟机下的Linux加载U盘出错
  • 怎么让LINUX启动自动加载WINDOWS分区?
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • linux下通过crond实现自动执行程序
  • 为什么linux下的C++程序这么少见? 请问那里有linux下的C++程序?什么类型的程序都可以.
  • 如何使用linux下gdb来调试python程序
  • linux上的程序怎样远程启动另一个linux系统上的某个程序
  • linux 下后台进程的编写 iis7站长之家
  • 在linux下面怎么安程序啊?我刚裝了一个 linux,下了一个迅雷安装程序,可是不知道怎么安装啊?真心请教。
  • 请指点: 在windows下能否通过程序来获取linux下的用户列表,甚至通过自己写的windows程序界面增加修改linux的用户
  • Linux程序员在公司里做什么程序?(Linux程序员请进)
  • 我的linux程序 如何 在pc机器上运行。现在我用arm-linux-g++ 编译后的程序在我的嵌入设备上运行。
  • Linux 编程怎么样在程序开启一个程序,和关闭一个程序?
  • Linux下的程序是在内存中运行的吗?为什么在程序运行的时候可以删除程序文件?
  • 请指点: 在windows下能否通过程序来获取linux下的用户列表,甚至通过自己写的windows程序界面增加修改linux的用户 100分相赠
  • linux初学者一简单问题!在线送分!linux设备驱动程序一书的第一个程序.
  • 最进想学习LINUX程序设计,想了解一下在LINUX下的C++程序开发工具有哪些?有快速做界面的那种吗?
  • 我写了个linux下的网络程序,程序在多个电脑间通信,但是我没有多个电脑,怎么调试这样的程序啊?
  • linux下,一个程序如何向另一个程序发送消息,另一个程序如何接收
  • 请问载linux下如何调试汇编程序,有没有像debug的程序。
  • linux的程序员是不是比windows程序员的薪水高啊?
  • 请教:如何在linux服务器上实现一个程序,该程序可启动远程linux客户端上的一个脚本(sh后缀)的执行
  • 学了linux程序设计后能不能编写出应用程序
  • 怎样开发在LINUX 上运行的应用程序,像WINDOWS桌面应用程序一样
  • linux c/c++ IP字符串转换成可比较大小的数字
  • 在win分区上安装linux和独立分区安装linux有什么区别?可以同时安装吗?(两个linux系统)
  • linux哪个版本好?linux操作系统版本详细介绍及选择方案推荐
  • 在虚拟机上安装的linux上,能像真的linux系统一样开发linux程序么?
  • secureCRT下Linux终端汉字乱码解决方法
  • 我重装window后,把linux的引导区覆盖了,进不了linux怎么办?急啊,望热心的人帮助 (现在有linux的盘)
  • Linux c字符串中不可打印字符转换成16进制
  • 安装vmware软件,不用再安装linux系统,就可以模拟linux系统了,然后可以在其上学习一下LINUX下的基本操作 了?
  • Linux常用命令介绍:更改所属用户群组或档案属性
  • 红旗Linux主机可以通过127.0.0.1访问,但如何是连网的Win2000机器通过Linux的IP去访问Linux


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3