crond 与 守护进程


一、 crond  (定时任务管理)

1、crond 是linux用来定期执行程序的命令。当安装完成操作系统之后,默认便会启动此任务调度命令。crond命令每分锺会定期检查是否有要执行的工作,如果有要执行的工作便会自动执行该工作。而linux任务调度的工作主要分为以下两类: 
        1)系统执行的工作:系统周期性所要执行的工作,如备份系统数据、清理缓存 
        2)个人执行的工作:某个用户定期要做的工作,例如每隔10分钟检查邮件服务器是否有新信,这些工作可由每个用户自行设置

    2、crontab    // 让使用者在固定时间或固定间隔执行程式
(1)使用方式 :   crontab -l|-r|-e|-i [username]

(2)说明 : 
     usename :指设定指定 user 的时程表(前提:必须要有其权限才能够指定他人的时程表)。如果不使用 -u user 的话,就是表示设定自己的时程表。 
(3)参数 : 
        -e : 执行文字编辑器来设定时程表(  内定的文字编辑器是 VI  )      crontabl -e
        -r : 删除目前的时程表    crontabl -r 
        -l : 列出目前的时程表    crontabl -l

-i : 删除时程表前给提示    crontabl -ri

(4)   时程表   的格式 :     f1 f2 f3 f4 f5 program 
      注:     f1 :分钟,f2 :小时,f3 :日期,f4 :月份,f5 :    ,program :要执行的程式。

若 f1(f2... ...) :“  *  ” ---> 每分钟(小时... ...)都要执行程式

"    */n   "   ---->  每 n 分钟(... ...)个时间间隔执行一次

" a, b, c,... "---> 第 a, b, c,... 分钟(... ...)要执行

(5)使用者也可以将所有的设定先存放在档案 file 中,用 crontab file 的方式来设定时程表。 
     使用方法: 用VI编辑一个文件 cronfile,然后在这个文件中输入格式良好的时程表。编辑完成后,保存并退出。

$: crontab cronfile

二、守护进程  (没有控制终端)

守护进程,亦称为“精灵进程”。守护进程是运行在后台的一种特殊进程。它独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件,即不与任何控制终端相关联。

守护进程通常采用以d结尾的名字,表示 Daemon.

参数a:列 当前用户的进程 + 所有其他用户的进程

参数x:列 有 控制终端的进程 + 所有 无控制终端的进程

参数j:列出 与 作业控制相关的信息。

例:ps axj | grep -E ‘d$‘  // 查找所有 以d结尾 的进程

TPGID:-1 --> 没有控制终端的进程(守护进程)

COMMAND:[] ---> 内核进程

创建守护进程

1. 调用 umask将文件模式创建屏蔽字设置为0。     ( umask(0); )

2. 调用 fork,父进程退出(exit)。

原因:1)如果该守护进程是作为一条简单的shell命令启动的,那么父进程终止使得shell认为该命令已经执行完毕。

2)保证子进程不是一个进程组的组长进程。

3. 调用setsid创建一个新会话。     ( setsid(); )

setsid会导致: 1)调用进程成为新会话的首进程。

2)调用进程成为一个进程组的组长进程 。

3)调用进程没有控制终端。(再次fork一次,保证daemon进程,之后不会打开tty设备)

4. 将当前工作目录更改为根目录。    (chdir)

5. 关闭不在需要的文件描述符(输入输出错误)。

6. 其他:忽略SIGCHLD信号。

实例:

#include<stdio.h>
#include<unistd.h>
#include<stdlib.h>
#include<signal.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include<errno.h>

#define MAXFILE 3
void my_daemon()
{
	int i=0;
	int fd;
	struct sigaction sa;
	sa.sa_handler = SIG_IGN;
	sa.sa_flags = 0;
	sigemptyset(&sa.sa_mask);

	umask(0);
	pid_t id=fork();
	if(id < 0)
	{
		perror("fork");
		exit(1);
	}
	else if(id > 0)//father
	{
		exit(0);
	}

	setsid();

	if(id < 0)
	{
		perror("fork");
		exit(1);
	}
	else if(id > 0)//father
	{
		exit(0);
	}

	if(chdir("/") < 0)
	{
		perror("chdir");
		exit(1);
	}
	for(int i=0;i<MAXFILE;i++)
	{
		close(i);
	}
	signal(SIGCHLD,SIG_IGN);
	close(fd);
}
int main()
{
	FILE *fp;
	time_t t;
	my_daemon();
	while(1)
	{
		sleep(6);
		if( (fp=fopen("./test.log", "a")) >= 0)
		{
			int i=0;
			t = time(0);
			fprintf(fp, "[%d]hello friends \n", i++);
			fclose(fp);
		 }
	}
	return 0;
}
时间: 2024-09-30 16:03:52

crond 与 守护进程的相关文章

Linux之————守护进程与crond定时任务

一. 守护进程 守护进程又称为精灵(Daemon)进程,顾名思义,守护是一直会存在的,它是运行在后台的一种特殊的进程,独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件.比如当Linux系统启动的时候会启动一些系统服务进程,因为这些进程没有控制终端因此不能直接和用户进行交互,它的生命周期随系统,而不是像用户登录或者运行程序才开始启动的而进程运行完毕或者用户注销后就终止,这种进程就称之为守护进程或者精灵进程. 可以在终端下查看系统中的守护进程,这些进程通常以精灵的单词Daemon的首字

Linux:守护进程

守护进程也称精灵进程(Daemon): 是运行在后台的一种特殊进程.他独立与控制终端并且周期性的执行某种任务或者处理某些发生的事情.守护进程是一种很有用的进程,在操作系统中,维护系统各种设施的进程. 在Linux中,大多数服务器就是守护进程实现的:比如:Internet服务器inetd,Web服务器httpd 在上一篇博文例行性工作中.crond就是守护进程进行的任务. 系统服务进程不受用户注销登录的影响,只随系统关闭而关闭. 用ps axj命令查看系统中的进程.参数a表示不仅列当前用户的进程,

crond守护进程

Linux系统任务计划/etc/crontab cron的主配置文件,可以定义PATHcron格式如下:# .----------------分钟 (0 - 59)# | .------------- 小时 (0 - 23)# | | .---------- 日 (1 - 31)# | | | .------- 月 (1 - 12)# | | | | .---- 周 (0 - 6) (周日=0 or 7) # | | | | |# * * * * * user-name command to b

Python实例浅谈之五Python守护进程和脚本单例运行

一.简介 守护进程最重要的特性是后台运行:它必须与其运行前的环境隔离开来,这些环境包括未关闭的文件描述符.控制终端.会话和进程组.工作目录以及文件创建掩码等:它可以在系统启动时从启动脚本/etc/rc.d中启动,可以由inetd守护进程启动,也可以有作业规划进程crond启动,还可以由用户终端(通常是shell)执行. Python有时需要保证只运行一个脚本实例,以避免数据的冲突. 二.Python守护进程 1.函数实现 #!/usr/bin/env python #coding: utf-8

守护进程

为什么要引入守护进程:   因为它生存期长,它独立于控制终端.会话周期(下文有解释)执行任务:   由于在linux中,每一个系统与用户进行交流的界面称为终端,每一个从此终端开始运行的进程都会依赖这个终端,这个终端就称为这些进程的 控制终端.当控制终端被关闭时,相应的进程都会自动关闭.但是守护进程却能突破这种限制,它被执行开始运转,直到整个系统关闭时才退出. 守护进程的特性: 1> 守护进程最重要的特性是后台运行. 2> 其次,守护进程必须与其运行前的环境隔离开来.这些环境包括未关闭的文件描述

Daemon守护进程

Daemon守护进程 在linux中,每一个系统与用户进行交流的界面称为终端,每一个从此终端开始运行的进程,都会依附于这个终端,这个终端就称为这些进程的控制终端,当控制终端被关闭时,相应的进程都会自动关闭. 守护进程(Daemon)是运行在后台的一种特殊进程.它独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件.守护进程是一种很有用的进程.Linux的大多数服务器就是用守护进程实现的.比如,Internet服务器inetd,Web服务器httpd等.同时,守护进程完成许多系统任务,比

Linux 守护进程和超级守护进程(xinetd)

一 .Linux守护进程 Linux 服务器在启动时需要启动很多系统服务,它们向本地和网络用户提供了Linux的系统功能接口,直接面向应用程序和用户.提供这些服务的程序是由运行在后台的守护进程来执行的. 守护进程是生存期长的一种进程.它们独立于控制终端并且周期性的执行某种任务或等待处理某些发生的事件.他们常常在系统引导装入时启动,在系统关闭时终止. linux系统有很多守护进程,大多数服务器都是用守护进程实现的.同时,守护进程完成许多系统任务,比如,作 业规划进程crond.打印进程lqd等.有

linux守护进程解读

Linux系统守护进程详解 不要关闭下面这几个服务: acpid, haldaemon, messagebus, klogd, network, syslogd 1. NetworkManager, NetworkManagerDispatcher NetworkManager 是一个自动切换网络连接的后台进程.很多笔记本用户都需要启用该功能,它让你能够在无线网络和有线网络之间切换.大多数台式机用户应该关闭该服务.一些 DHCP 用户可能需要开启它. 2. acpid 配置文件:/proc/ac

《APUE》读书笔记第十三章-守护进程

守护进程 守护进程是生存期较长的一种进程,它们常常在系统自举时启动,仅在系统关闭时才终止.因为它们没有控制终端,所以说它们是在后台运行的.UNIX系统由很多守护进程,它们执行日常事务活动. 本章主要介绍守护进程的结构,以及如何编写守护进程程序和守护进程如何报告错误情况. 一.守护进程的编程规则 (1)首先要做的是调用umask将文件模式创建屏蔽字设置为0.这是由于继承得来的文件模式创建屏蔽字可能会拒绝设置某些权限. (2)调用fork,然后使父进程退出(exit). (3)调用setsid以创建