精华内容
下载资源
问答
  • 计划任务管理

    2021-05-16 18:59:45
    一、计划任务管理概念 通常由两种: 1、突发性的,也叫一次性的,这次执行完以后就没有的那一种; 2、周期性的,也就是每隔一段时间需要执行一次的。 二、一次性任务 我们处理一次性任务的时候,通过‘at’命令来...

    计划任务管理

    一、计划任务管理概念

    通常由两种:
    1、突发性的,也叫一次性的,这次执行完以后就没有的那一种;
    2、周期性的,也就是每隔一段时间需要执行一次的。

    二、一次性任务

    我们处理一次性任务的时候,通过‘at’命令来执行。
    不过执行at之前,需要由atd这个服务的支持。

    at命令

    at 【HH:MM】【yyyy-mm-dd】
    

    新建任务:
    回车-继续写
    结束页面,ctrl+d 提交
    查询任务:atq
    在这里插入图片描述
    如果创建同名,会更改其中一个的时间。

    相关命令

    at now +2min  以当前系统时间为准,2分钟后
    at teatime  今天下午茶时间(下午四点)
    at teatime tomorrow  明天下午茶时间
    at teatime +3day
    noon中午
    进文件夹查询一次性任务 :cd /var/spool/at/
    

    当我们执行的时候,系统会发送邮件。
    邮件可以通过 cd /var/spool/mail 来查询

    删除

    atrm + 任务号 =删除任务
    在这里插入图片描述

    三、周期性计划任务crond

    crontab命令

    ●按照预先设置的时间周期(分钟、小时、天…)重复执行用户指定的命令操作
    ●属于周期性计划任务
    ●主要设置文件
    全局配置文件,位于文件:letc/crontab
    系统默认的设置,位于目录:letclcron.*/
    用户定义的设置,位于文件: /varlspool/cron/用户名

    进入crontab查看属性:

    在这里插入图片描述
    第一行SHELL变量指定了系统要使用哪个shell,这里是bash
    第二行PATH变量指定了系统执行命令的路径
    第三行MAILTO变量指定了crond的任务执行信息将通过电子邮件发送给root用户,如果MAILTO变量的值为空,则表示不发送任务执行信息给用户
    第四行的HOME变量指定了在执行命令或者脚本时使用的主目录。
    五个*不同的含义按顺序分别是 分 时 日 月 周
    minute: 表示分钟,可以是从0到59之间的任何整数。
    hour:表示小时,可以是从0到23之间的任何整数。
    day:表示日期,可以是从1到31之间的任何整数。
    month:表示月份,可以是从1到12之间的任何整数。
    week:表示星期几,可以是从0到7之间的任何整数,这里的0或7代表星期日。
    command:要执行的命令,可以是系统命令,也可以是自己编写的脚本文件。

    在以上各个字段中,还可以使用以下特殊字符:

    • 表示该范围内的任意时间
      , 表示间隔的多个不连续时间点
    • 表示一个连续的时间范围
      / 指定时间的间隔频率

    相关命令:

    crontab -e //新建任务
    crontab -l //查询命令
    crontab -r //删除全部
    root可以用 crontab -u 用户名来管理其他用户的任务计划
    
    展开全文
  • 在FreeRTOS中,线程的术语又可以被称之为任务,或许这样更加合适,本文将介绍任务的创建/删除,任务参数的使用,以及任务优先级;

    在FreeRTOS中,线程的术语又可以被称之为任务,或许这样更加合适,本文将介绍任务的创建/删除,任务参数的使用,以及任务优先级;

    1 软实时和硬实时

    硬实时系统的任务运行正确性与响应时限是紧密相关的,一旦超过时限将导致严重的后果,比如导弹控制系统、高铁自动驾驶系统等,都是需要严格的响应时限的。
    软实时系统中,虽然也存在时限指标,但是如果输出响应超过时限,一般不会造成严重后果,比如Windows桌面任务,DVD播放机的视频播放。
    大多数嵌入式系统不仅能满足硬实时要求,也能满足软实时要求。
    软实时

    • WindowsLinux系统通常为软实时,当然有补丁可以将内核做成硬实时的系统,不过商用没有这么做的。

    硬实时

    • VxWorksuCOSFreeRTOSWinCERT-thread等实时系统;

    2 任务概述

    2.1 基本写法

    FreeRTOS多任务的实时系统,其最基本的运行单元为任务,其表示形式为由C语言函数实现的,该函数原型要求必须返回 void,并且带一个 void 类型指针的参数;具体如下所示;

    void ATaskFunc(void *args);
    

    每个任务都是在自己权限范围内的一个小程序。其具有程序入口,通常会运行在一个死循环中,也不会退出,具体如下;

    void ATaskFunc(void *args){
    
    	while(1){
    		//TODO 
    	}
    }
    

    FreeRTOS 任务不允许以任何方式从实现函数中返回——它们绝不能有一条return语句,也不能执行到函数末尾,如果不再需要,则在任务中调用删除任务的API,具体如下所示;

    ```c
    void ATaskFunc(void *args){
    
    	vTaskDelete( NULL );
    }
    

    2.2 TCB

    TCB为任务控制块,或者是线程控制块,另外操作系统中还有PCB为进程控制块,主要封装了一个任务在系统调度中所需要的所有资源,FreeRTOSTCB的成员,具体如下所示;

    任务状态如下所示;

    typedef struct xTASK_STATUS
    {
    	/* The handle of the task to which the rest of the information in the structure relates. */
    	TaskHandle_t xHandle;			
    	/* A pointer to the task's name.*/ 
    	const char *pcTaskName;			
    	/* A number unique to the task. */	
    	UBaseType_t xTaskNumber;		
    	/* The state in which the task existed when the structure was populated. */
    	eTaskState eCurrentState;		
    	/* The priority at which the task was running (may be inherited) when the structure was populated. */
    	UBaseType_t uxCurrentPriority;	
    	UBaseType_t uxBasePriority;		
    	uint32_t ulRunTimeCounter;		
    	StackType_t *pxStackBase;		
    	uint16_t usStackHighWaterMark;	
    } TaskStatus_t;
    

    每一个任务都会拥有一个自己的TCB,具体如下图所示;

    typedef struct tskTaskControlBlock
    {
    	volatile StackType_t	*pxTopOfStack;	/*< Points to the location of the last item placed on the tasks stack.  THIS MUST BE THE FIRST MEMBER OF THE TCB STRUCT. */
    
    	#if ( portUSING_MPU_WRAPPERS == 1 )
    		xMPU_SETTINGS	xMPUSettings;		/*< The MPU settings are defined as part of the port layer.  THIS MUST BE THE SECOND MEMBER OF THE TCB STRUCT. */
    	#endif
    
    	ListItem_t			xStateListItem;	/*< The list that the state list item of a task is reference from denotes the state of that task (Ready, Blocked, Suspended ). */
    	ListItem_t			xEventListItem;		/*< Used to reference a task from an event list. */
    	UBaseType_t			uxPriority;			/*< The priority of the task.  0 is the lowest priority. */
    	StackType_t			*pxStack;			/*< Points to the start of the stack. */
    	char				pcTaskName[ configMAX_TASK_NAME_LEN ];/*< Descriptive name given to the task when created.  Facilitates debugging only. */ /*lint !e971 Unqualified char types are allowed for strings and single characters only. */
    
    	#if ( ( portSTACK_GROWTH > 0 ) || ( configRECORD_STACK_HIGH_ADDRESS == 1 ) )
    		StackType_t		*pxEndOfStack;		/*< Points to the highest valid address for the stack. */
    	#endif
    
    	#if ( portCRITICAL_NESTING_IN_TCB == 1 )
    		UBaseType_t		uxCriticalNesting;	/*< Holds the critical section nesting depth for ports that do not maintain their own count in the port layer. */
    	#endif
    
    	#if ( configUSE_TRACE_FACILITY == 1 )
    		UBaseType_t		uxTCBNumber;		/*< Stores a number that increments each time a TCB is created.  It allows debuggers to determine when a task has been deleted and then recreated. */
    		UBaseType_t		uxTaskNumber;		/*< Stores a number specifically for use by third party trace code. */
    	#endif
    
    	#if ( configUSE_MUTEXES == 1 )
    		UBaseType_t		uxBasePriority;		/*< The priority last assigned to the task - used by the priority inheritance mechanism. */
    		UBaseType_t		uxMutexesHeld;
    	#endif
    
    	#if ( configUSE_APPLICATION_TASK_TAG == 1 )
    		TaskHookFunction_t pxTaskTag;
    	#endif
    
    	#if( configNUM_THREAD_LOCAL_STORAGE_POINTERS > 0 )
    		void			*pvThreadLocalStoragePointers[ configNUM_THREAD_LOCAL_STORAGE_POINTERS ];
    	#endif
    
    	#if( configGENERATE_RUN_TIME_STATS == 1 )
    		uint32_t		ulRunTimeCounter;	/*< Stores the amount of time the task has spent in the Running state. */
    	#endif
    
    	#if ( configUSE_NEWLIB_REENTRANT == 1 )
    		struct	_reent xNewLib_reent;
    	#endif
    
    	#if( configUSE_TASK_NOTIFICATIONS == 1 )
    		volatile uint32_t ulNotifiedValue;
    		volatile uint8_t ucNotifyState;
    	#endif
    
    	/* See the comments above the definition of
    	tskSTATIC_AND_DYNAMIC_ALLOCATION_POSSIBLE. */
    	#if( tskSTATIC_AND_DYNAMIC_ALLOCATION_POSSIBLE != 0 ) /*lint !e731 Macro has been consolidated for readability reasons. */
    		uint8_t	ucStaticallyAllocated; 		/*< Set to pdTRUE if the task is a statically allocated to ensure no attempt is made to free the memory. */
    	#endif
    
    	#if( INCLUDE_xTaskAbortDelay == 1 )
    		uint8_t ucDelayAborted;
    	#endif
    
    } tskTCB;
    
    

    3 任务状态

    任务顶层存在两种状态,运行态非运行态
    但是非运行的任务状态又可以分为:堵塞状态 / Blocked,挂起状态 / Suspend,就绪状态 / Ready,下面简单做一下介绍;

    • 运行状态 / Running
      运行态的任务完全占用CPU的使用权,如果当前CPU只有一个内核,那么在某个时刻只能运行一个任务,就是所谓的单核单线程;

    • 堵塞状态 / Blocked
      用户可以主动调用vTaskDelay(T)将任务进入堵塞状态,直到任务堵塞时间已经达到T;或者该任务在等待队列,信号量,事件组,通知或信号量事件时,也将处于堵塞状态;处于堵塞状态的任务不再占用CPU,同样也不能直接进入运行状态,而是先进入就绪状态

    • 挂起状态 / Suspend
      任何状态的下的任务都可以通过调用vTaskSuspend函数进入挂起状态,并且无法直接进入运行态,只能通过调用xTaskResume函数进入就绪状态

    • 就绪状态 / Ready
      被抢占的任务将处于就绪状态,挂起的任务被回复的会处于就绪状态,堵塞的任务收到相应事件也会处于就绪状态,如果当前没有更高优先级的任务处于运行,则当前就绪状态的任务进入运行状态

    其主要的状态转换关系如下图所示;

    在这里插入图片描述
    FreeRTOS使用一个枚举封装了任务的状态,具体如下所示;

    typedef enum
    {
    	eRunning = 0,/* A task is querying the state of itself, so must be running. */
    	eReady,		/* The task being queried is in a read or pending ready list. */
    	eBlocked,	/* The task being queried is in the Blocked state. */
    	eSuspended,	/* The task being queried is in the Suspended state*/
    	eDeleted,	/* The task being queried has been deleted, but its TCB has not yet been freed. */
    	eInvalid	/* Used as an 'invalid state' value. */
    } eTaskState;
    

    4 任务优先级

    FreeRTOS的最低优先级是0,分配给了空闲任务,空闲任务的优先级使用宏定义tskIDLE_PRIORITY进行表示,最大的优先级为需要用户进行配置;在FreeRTOS.h中可以看到预编译指令,具体如下;

    #ifndef configMAX_PRIORITIES
    	#error Missing definition:  configMAX_PRIORITIES must be defined in FreeRTOSConfig.h.  \
    	See the Configuration section of the FreeRTOS API documentation for details.
    #endif
    
    #if configMAX_PRIORITIES < 1
    	#error configMAX_PRIORITIES must be defined to be greater than or equal to 1.
    #endif
    

    configMAX_PRIORITIES需要用户在FreeRTOSConfig.h进行定义,则任务最大的优先级为configMAX_PRIORITIES - 1

    5 相关函数

    任务管理的函数声明和一些基本类型都封装在源码tasks.h中;

    5.1 创建任务

    使用xTaskCreate创建一个任务,具体如下所示;

    // Task to be created.
     void vTaskCode( void * pvParameters )
     {
    	 for( ;; )
    	 {
    		 // Task code goes here.
    	 }
     }
     // Function that creates a task.
     void vOtherFunction( void )
     {
     static uint8_t ucParameterToPass;
     TaskHandle_t xHandle = NULL;
    
    	 // Create the task, storing the handle.  Note that the passed parameter ucParameterToPass
    	 // must exist for the lifetime of the task, so in this case is declared static.  If it was just an
    	 // an automatic stack variable it might no longer exist, or at least have been corrupted, by the time
    	 // the new task attempts to access it.
    	 xTaskCreate( vTaskCode, "NAME", STACK_SIZE, &ucParameterToPass, tskIDLE_PRIORITY, &xHandle );
         configASSERT( xHandle );
    
    	 // Use the handle to delete the task.
         if( xHandle != NULL )
         {
    	     vTaskDelete( xHandle );
         }
     }
    

    5.2 函数删除

    使用函数vTaskDelete对函数进行删除;

     void vTaskDelete( TaskHandle_t xTaskToDelete ) PRIVILEGED_FUNCTION;
    
     void vOtherFunction( void )
     {
     TaskHandle_t xHandle;
    
    	 // Create the task, storing the handle.
    	 xTaskCreate( vTaskCode, "NAME", STACK_SIZE, NULL, tskIDLE_PRIORITY, &xHandle );
    
    	 // Use the handle to delete the task.
    	 vTaskDelete( xHandle );
     }
    

    5.3 堵塞任务

    使用vTaskDelay函数可以将任务堵塞一定时间;

     void vTaskDelay( const TickType_t xTicksToDelay ) PRIVILEGED_FUNCTION;
     void vTaskFunction( void * pvParameters )
     {
     // Block for 500ms.
     const TickType_t xDelay = 500 / portTICK_PERIOD_MS;
    
    	 for( ;; )
    	 {
    		 // Simply toggle the LED every 500ms, blocking between each toggle.
    		 vToggleLED();
    		 vTaskDelay( xDelay );
    	 }
     }
    
    

    5.4 挂起和恢复

    使用函数vTaskSuspend可以将函数挂起,通过vTaskResume(xHandle)函数可以将挂起的函数恢复到就绪状态;

     void vTaskSuspend( TaskHandle_t xTaskToSuspend ) PRIVILEGED_FUNCTION;
    
     void vAFunction( void )
     {
     	 TaskHandle_t xHandle;
    
    	 // Create a task, storing the handle.
    	 xTaskCreate( vTaskCode, "NAME", STACK_SIZE, NULL, tskIDLE_PRIORITY, &xHandle );
    
    	 // ...
    
    	 // Use the handle to suspend the created task.
    	 vTaskSuspend( xHandle );
    
    	 // ...
    
    	 // The created task will not run during this period, unless
    	 // another task calls vTaskResume( xHandle ).
    
    	 //...
    
    
    	 // Suspend ourselves.
    	 vTaskSuspend( NULL );
    
    	 // We cannot get here unless another task calls vTaskResume
    	 // with our handle as the parameter.
     }
    

    6 总结

    先了解任务之前的状态,先学会使用FreeRTOS的常用接口,后续对于其调度算法和内存管理的算法可以分析和学习一下。


    文中难免有错误和纰漏之处,请大佬们不吝赐教
    创作不易,如果本文帮到了您;
    请帮忙点个赞 👍👍👍;
    请帮忙点个赞 👍👍👍;
    请帮忙点个赞 👍👍👍;

    展开全文
  • 定时任务概念3. 定时任务相关介绍4. 定时任务案例5. 定时发邮件6. day19作业讲解 1. 源码包管理 1. 要有源码包 下载源码包 [root@qls ~]# wget http://nginx.org/download/nginx-1.18.0.tar.gz [root@qls ~]...

    day21

    1. 源码包管理

    
    1. 要有源码包  下载源码包
    
    [root@qls ~]# wget  http://nginx.org/download/nginx-1.18.0.tar.gz
    
    
    
    [root@qls ~]# ll
    total 1016
    -rw-r--r-- 1 root root 1039530 Apr 21 22:33 nginx-1.18.0.tar.gz
    
    2. 解压软件包 
    
    [root@qls ~]# tar  xf  nginx-1.18.0.tar.gz 
    [root@qls ~]# ll
    total 1016
    drwxr-xr-x 8 user05 1001     158 Apr 21 22:09 nginx-1.18.0
    -rw-r--r-- 1 root   root 1039530 Apr 21 22:33 nginx-1.18.0.tar.gz
    
    
    3. 进入这个目录,进行预编译操作   编译设置  
    
    [root@qls nginx-1.18.0]# ./configure   --prefix=/opt/nginx-1.18.0   --with-http_ssl_module
    checking for OS
     + Linux 3.10.0-957.el7.x86_64 x86_64
    checking for C compiler ... not found
    
    ./configure: error: C compiler cc is not found		#报错   缺少编译软件 gcc
    
    
    
    #按照依赖
    
    [root@qls nginx-1.18.0]# yum install  -y  gcc
    
    
    
    #再次执行报错 
    
    ./configure: error: the HTTP rewrite module requires the PCRE library.
    You can either disable the module by using --without-http_rewrite_module
    option, or install the PCRE library into the system, or build the PCRE library
    statically from the source with nginx by using --with-pcre=<path> option.
    
    
    #解决:
    
    [root@qls nginx-1.18.0]# yum install  -y  pcre  pcre-devel 
    
    
    #再次执行报错
    
    ./configure: error: SSL modules require the OpenSSL library.
    You can either do not enable the modules, or install the OpenSSL library
    into the system, or build the OpenSSL library statically from the source
    with nginx by using --with-openssl=<path> option.
    
    
    #解决:
    
    [root@qls nginx-1.18.0]# yum  install  -y  openssl  openssl-devel
    
    
    #4. 编译
    
    [root@qls nginx-1.18.0]# make
    
    
    5. 将编译的结果拷贝到指定的位置 
    
    [root@qls nginx-1.18.0]# make  install
    
    
    [root@qls nginx-1.18.0]# ll /opt/
    drwxr-xr-x 6 root root   54 Jul 31 16:54 nginx-1.18.0
    
    
    6. 做个软链接
    
    [root@qls ~]# ln -s  /opt/nginx-1.18.0/  /opt/nginx
    
    
    7. 启动 
    
    [root@qls ~]# /opt/nginx/sbin/nginx 
    
    

    2. 定时任务的概念

    
    	设定指定的时间周期性执行你的计划或者任务 
    	
    	crond		# 守护进程       分钟级别  
    	
    	两种:
    	
    		系统级别定时任务:	定时清理文件   收集系统信息  定时切割日志 
    		
    		用户级别定时任务:	同步时间    定时备份数据 
    	
    

    3. 定时任务相关介绍

    
    
    [root@qls ~]# ll  /etc/cron*  -d
    drwxr-xr-x. 2 root root  21 Jul 29 08:56 /etc/cron.d		#定时任务的统一存放目录 
    drwxr-xr-x. 2 root root  57 Jul 29 08:56 /etc/cron.daily	#系统每天执行的定时任务
    -rw-------  1 root root   0 Apr 11  2018 /etc/cron.deny		#定时任务的黑名单 
    drwxr-xr-x. 2 root root  22 Jul 29 08:56 /etc/cron.hourly	#系统每小时执行的定时任务
    drwxr-xr-x. 2 root root   6 Jun 10  2014 /etc/cron.monthly	#系统每月执行的定时任务
    -rw-r--r--  1 root root 451 Jun 10  2014 /etc/crontab		#定时任务主配置文件
    drwxr-xr-x. 2 root root   6 Jun 10  2014 /etc/cron.weekly	#系统每周执行的定时任务 
    
    
    
    [root@qls ~]# cat /etc/crontab
    SHELL=/bin/bash			#定时任务所使用的命令解释器 
    PATH=/sbin:/bin:/usr/sbin:/usr/bin		#定时任务所能用到的命令路径
    MAILTO=root				#接收邮件 
    
    # For details see man 4 crontabs
    
    # Example of job definition:
    # .---------------- minute (0 - 59)		#分钟   
    # |  .------------- hour (0 - 23)		#小时  
    # |  |  .---------- day of month (1 - 31)	#日期 
    # |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...	#月份 
    # |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
    # |  |  |  |  |			#  周 
    # *  *  *  *  * user-name  command to be executed
    
    分时日月周      用户    命令 
    
    
    #跟定时任务相关的文件 
    
    [root@qls ~]# ll /var/spool/cron/root		#存放定时任务的配置文件  
    total 0
    
    [root@qls ~]# ll /var/log/cron		#定时任务执行的过程   日志 
    
    
    [root@qls ~]# ll /var/spool/mail/	#用户的邮件  
    
    
    怎样书写定时任务 
    
    
    crontab			#书写定时任务的命令  
    
    选项:
    
    	-e			#编辑定时任务    ===   vi  /var/spool/cron/root
    	
    	-l			#查看定时任务    ===   cat  /var/spool/cron/root
    
    1. 语法检查 
    
    2. 方便简单 
    
    
    #定时任务的规则 
    
    *	# 每(分时日月周)都执行  
    
    */5	# 每 5 (分时日月周)执行  每隔多长时间  
    
    /5	
    
    1-3		#时间范围  1-3   连续的时间  1点到3点
    
    1,3		#不连续的时间  1点和3点 
    
    
    00 02 * * *   	#每天的凌晨2点整  
    
    00 02 1 * * 	#每个月的1号凌晨2点整  
    
    00 02 14 2 * 	#每年的2月14日凌晨2点整   
    
    00 02 * * 7 	#每周日的凌晨2点整  
    
    00 02 * 6 5 	#每年的6月份的每周五的凌晨2点整    
    
    00 02 14 * 7 	#每个月的14号或者周日的凌晨2点整
    
    00 02 14 2 7  	#每年的2月份的14号或者周日的凌晨2点整
    
    */10  02 * * * 	#每天的凌晨2点每隔10分钟  
    
    * * * * *   	#每分钟 
    
    00 00 14 2 *  	#每年的2月份14号的凌晨0点整
    
    */5 * * * *   	#每隔5分钟 
    
    00 02 * 1,5,8 *  #每年的1和5和8月的每天的凌晨2点整
    
    00 02 1-8 * *   #每个月的1到8号的凌晨2点整
    
    00 21 * * *   	#每天晚上21点整
    
    45 4 1,10,22 * * 	#每个月的1,10,22号 的凌晨4点45分 
    
    45 4 1-10 * *  		#每个月的1到10号的凌晨4点45分
    
    3,15 8-11 */2 * * 	#每个月每隔两天的8到11点的3分和15分的时候 
    
    0 23-7/2 * * *   	#每天的23点到7点的每隔2个小时的整点 
    
    15 21 * * 1-5		#每周一到周五的晚上21点15分
    
    
    

    4. 定时任务案例

    
    1. 定时同步系统时间 每分钟同步 
    
    [root@qls ~]# ntpdate  ntp.aliyun.com
    31 Jul 10:27:12 ntpdate[13673]: step time server 203.107.6.88 offset -28797.933639 sec
    [root@qls ~]# date
    Fri Jul 31 10:27:18 CST 2020
    
    
    定时任务最好加上注释  作者  时间 
    
    [root@qls ~]# crontab  -e
    no crontab for root - using an empty one
    crontab: installing new crontab
    [root@qls ~]# crontab  -l
    #同步系统时间 qls 20200731_10
    * * * * *  ntpdate  ntp.aliyun.com
    
    #修改时间
    [root@qls ~]# date -s  20200730
    Thu Jul 30 00:00:00 CST 2020
    [root@qls ~]# date
    Thu Jul 30 00:00:02 CST 2020
    
    #查看定时任务的执行过程
    
    [root@qls ~]# tailf  /var/log/cron
    Jul 31 17:01:01 qls run-parts(/etc/cron.hourly)[13622]: finished 0anacron
    Jul 31 17:52:01 qls crontab[13651]: (root) LIST (root)
    Jul 31 18:01:01 qls CROND[13656]: (root) CMD (run-parts /etc/cron.hourly)
    Jul 31 18:01:01 qls run-parts(/etc/cron.hourly)[13656]: starting 0anacron
    Jul 31 18:01:01 qls run-parts(/etc/cron.hourly)[13665]: finished 0anacron
    Jul 31 10:27:49 qls crontab[13675]: (root) BEGIN EDIT (root)
    Jul 31 10:30:30 qls crontab[13675]: (root) REPLACE (root)
    Jul 31 10:30:30 qls crontab[13675]: (root) END EDIT (root)
    Jul 31 10:30:36 qls crontab[13677]: (root) LIST (root)
    Jul 30 00:00:03 qls CROND[13682]: (root) CMD (ntpdate  ntp.aliyun.com)
    
    #查看接收的邮件发现了报错  说命令找不到 
    
    [root@qls ~]# ll  /var/spool/mail/root 
    -rw------- 1 root mail 3541 Jul 30 00:01 /var/spool/mail/root
    [root@qls ~]# tailf /var/spool/mail/root
    X-Cron-Env: <SHELL=/bin/sh>
    X-Cron-Env: <HOME=/root>
    X-Cron-Env: <PATH=/usr/bin:/bin>
    X-Cron-Env: <LOGNAME=root>
    X-Cron-Env: <USER=root>
    Message-Id: <20200729160201.064E8802C9EE@qls.localdomain>
    Date: Thu, 30 Jul 2020 00:02:01 +0800 (CST)
    
    /bin/sh: ntpdate: command not found
    
    
    #重新编写定时任务 
    
    [root@qls ~]# crontab -l
    #同步系统时间 qls 20200731_10
    * * * * *  /usr/sbin/ntpdate  ntp.aliyun.com
    
    
    [root@qls ~]# tailf  /var/log/cron
    Jul 30 00:01:01 qls run-parts(/etc/cron.hourly)[13694]: starting 0anacron
    Jul 30 00:01:02 qls anacron[13707]: Anacron started on 2020-07-30
    Jul 30 00:01:02 qls anacron[13707]: Normal exit (0 jobs run)
    Jul 30 00:01:02 qls run-parts(/etc/cron.hourly)[13709]: finished 0anacron
    Jul 30 00:02:01 qls CROND[13714]: (root) CMD (ntpdate  ntp.aliyun.com)
    Jul 30 00:03:01 qls CROND[13722]: (root) CMD (ntpdate  ntp.aliyun.com)
    Jul 30 00:03:31 qls crontab[13728]: (root) BEGIN EDIT (root)
    Jul 30 00:03:38 qls crontab[13728]: (root) REPLACE (root)
    Jul 30 00:03:38 qls crontab[13728]: (root) END EDIT (root)
    Jul 30 00:03:43 qls crontab[13730]: (root) LIST (root)
    
    
    
    Jul 30 00:04:01 qls crond[6003]: (root) RELOAD (/var/spool/cron/root)
    Jul 30 00:04:01 qls CROND[13734]: (root) CMD (/usr/sbin/ntpdate  ntp.aliyun.com)
    Jul 31 10:35:04 qls CROND[13741]: (root) CMD (/usr/sbin/ntpdate  ntp.aliyun.com)
    
    #邮件正在一直接收信息 导致邮件过大 
    
    [root@qls ~]# ll /var/spool/mail/root 
    -rw------- 1 root mail 7028 Jul 31 10:35 /var/spool/mail/root
    [root@qls ~]# ll /var/spool/mail/root 
    -rw------- 1 root mail 7929 Jul 31 10:36 /var/spool/mail/root
    
    #停掉邮件服务 日志不在发生变化 
    
    [root@qls ~]# systemctl  stop postfix
    [root@qls ~]# ll /var/spool/mail/root 
    -rw------- 1 root mail 8829 Jul 31 10:37 /var/spool/mail/root
    
    #但是会一直生成小文件 
    
    [root@qls ~]# ll /var/spool/postfix/maildrop/
    total 12
    -rwxr--r-- 1 root postdrop 601 Jul 31 10:38 7FF40C0CD48D
    -rwxr--r-- 1 root postdrop 600 Jul 31 10:39 A8919C0CD48E
    -rwxr--r-- 1 root postdrop 601 Jul 31 10:40 CD943C0CD48F
    
    
    #重新编写定时任务
    
    [root@qls ~]# crontab  -l
    #同步系统时间 qls 20200731_10
    * * * * *  /usr/sbin/ntpdate  ntp.aliyun.com &>/dev/null
    
    [root@qls ~]# systemctl  start postfix
    
    [root@qls ~]# ll /var/spool/mail/root 
    -rw------- 1 root mail 13469 Jul 31 10:43 /var/spool/mail/root
    
    
    总结:
    
    1. 定时任务要有注释 作者 时间 
    
    2. 定时任务的命令一定要在命令行上面执行成功
    
    3. 定时任务要使用绝对路径 
    
    4. 定时任务写命令的时候,尽量复制之前执行成功的命令 减少出错率
    
    5. 定时任务的执行结果定向到指定的文件中或者定向到空
    
    
    2. 把系统的时间追加到一个文件中
    
    
    [root@qls ~]# date +%F_%T >> /root/time.txt
    [root@qls ~]# cat /root/time.txt
    2020-07-31_10:51:45
    
    
    [root@qls ~]# crontab -l
    #同步系统时间 qls 20200731_10
    * * * * *  /usr/sbin/ntpdate  ntp.aliyun.com &>/dev/null
    #xxxxxxxxxx
    * * * * *  /usr/bin/date +%F_%T >> /root/time.txt  
    
    
    [root@qls ~]# tailf  /var/log/cron
    Jul 31 10:54:01 qls crond[6003]: (root) RELOAD (/var/spool/cron/root)
    Jul 31 10:54:01 qls CROND[14046]: (root) CMD (/usr/sbin/ntpdate  ntp.aliyun.com &>/dev/null)
    Jul 31 10:54:01 qls CROND[14047]: (root) CMD (/usr/bin/date +)
    
    
    #修改定时任务
    
    [root@qls ~]# crontab -l
    #同步系统时间 qls 20200731_10
    * * * * *  /usr/sbin/ntpdate  ntp.aliyun.com &>/dev/null
    #xxxxxxxxxx
    * * * * *  /usr/bin/date +\%F_\%T >> /root/time.txt  
    
    
    
    [root@qls ~]# tailf  /var/log/cron
    Jul 31 10:56:01 qls crond[6003]: (root) RELOAD (/var/spool/cron/root)
    Jul 31 10:56:01 qls CROND[14074]: (root) CMD (/usr/bin/date +%F_%T >> /root/time.txt  )
    
    
    [root@qls ~]# cat time.txt 
    2020-07-31_10:56:01
    
    
    总结:
    
    	定时任务中,有些特殊字符不识别,需要转义  
    	
    
    3. 备份/etc/目录   压缩包名带有时间戳    保留最近的3天数据 
    
    [root@qls ~]# cat backup.sh
    #!/bin/bash
    #重新定义环境变量 
    export  PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/.local/bin:/root/bin
    #1.创建备份目录
    mkdir -p  /backup
    #2.开始备份
    cd  /
    tar czf  /backup/etc_$(date +%F_%M).tar.gz  etc/  
    #3.删除3天以前的数据
    find  /backup  -type f -mtime  +3   -name "*.tar.gz"  -delete
    
    
    [root@qls ~]# sh  backup.sh
    [root@qls ~]# ll /backup/
    total 9972
    -rw-r--r-- 1 root root 10210944 Jul 31 11:05 etc_2020-07-31_05.tar.gz
    
    #批量执行 
    
    [root@qls ~]# for i in {20..31};do date -s 2020/07/$i &&  sh /root/backup.sh ;done
    
    
    #编写定时任务 
    [root@qls ~]# crontab  -l
    #同步系统时间 qls 20200731_10
    * * * * *  /usr/sbin/ntpdate  ntp.aliyun.com &>/dev/null
    #xxxxxxxxxx
    * * * * *  /usr/bin/date +\%F_\%T >> /root/time.txt  
    #备份
    * * * * *  /bin/bash   /root/backup.sh  &>/dev/null
    
    
    [root@qls ~]# tailf  /var/log/cron
    Jul 31 11:10:01 qls crond[6003]: (root) RELOAD (/var/spool/cron/root)
    Jul 31 11:10:01 qls CROND[14327]: (root) CMD (/usr/bin/date +%F_%T >> /root/time.txt  )
    Jul 31 11:10:01 qls CROND[14328]: (root) CMD (/bin/bash   /root/backup.sh  &>/dev/null)
    Jul 31 11:10:01 qls CROND[14329]: (root) CMD (/usr/sbin/ntpdate  ntp.aliyun.com &>/dev/null)
    
    
    [root@qls ~]# ll  /backup/
    total 59832
    -rw-r--r-- 1 root root 10210944 Jul 28 00:00 etc_2020-07-28_00.tar.gz
    -rw-r--r-- 1 root root 10210944 Jul 29 00:00 etc_2020-07-29_00.tar.gz
    -rw-r--r-- 1 root root 10210944 Jul 30 00:00 etc_2020-07-30_00.tar.gz
    -rw-r--r-- 1 root root 10210944 Jul 31 00:00 etc_2020-07-31_00.tar.gz
    -rw-r--r-- 1 root root 10210944 Jul 31 11:05 etc_2020-07-31_05.tar.gz
    -rw-r--r-- 1 root root 10210944 Jul 31 11:10 etc_2020-07-31_10.tar.gz
    
    

    5. 定时发邮件

    
    
    [root@qls ~]# yum install  -y  mailx
    
    [root@qls ~]# vim /etc/mail.rc
    
    #发件人
    
    set from=1176494252@qq.com
    #邮件服务器
    
    set smtp=smtp.qq.com
    #发件人用户名
    
    set smtp-auth-user=1176494252@qq.com
    #发件人密码(QQ邮箱不可以使用密码,只能使用授权码)
    
    set smtp-auth-password=xxx
    #登录方式
    
    set smtp-auth=login
    #邮件服务器协议及端口
    
    set smtp=smtps://smtp.qq.com:465
    #忽略证书
    
    set ssl-verify=ignore
    #指定证书位置
    
    set nss-config-dir=/etc/pki/nssdb/
    
    #或者指定别的证书位置,创建证书目录
    
    
    
    #放到最后  
    set from=xxx@qq.com
    set smtp=smtp.qq.com
    set smtp-auth-user=xxx@qq.com
    set smtp-auth-password=xxx		#客户端的授权码  
    set smtp-auth=login
    set smtp=smtps://smtp.qq.com:465
    set ssl-verify=ignore
    set nss-config-dir=/etc/pki/nssdb/
    
    
    [root@qls ~]# echo  "test"  | mail  -s "hello"  xxxx@qq.com
    [root@qls ~]# Error in certificate: Peer's certificate issuer has been marked as not trusted by the.		#忽略这个错误 
    
    
    [root@qls ~]# mkdir qingshu  
    [root@qls ~]# cd qingshu
    [root@qls qingshu]# vim  qingshu1.txt
    [root@qls qingshu]# mail  -s "致亲爱的小姐姐"   xxx@qq.com  <  qingshu1.txt 
    [root@qls qingshu]# Error in certificate: Peer's certificate issuer has been marked as not trusted by the.
    
    
    #编写自动化脚本 
    
    [root@qls qingshu]# cat /root/send_mail.sh
    #!/bin/bash
    Qingshu=$(ls -1  /root/qingshu/ |head -1)
    mail  -s "致亲爱的小姐姐"  xxxx@qq.com  < /root/qingshu/$Qingshu  
    mail  -s "致亲爱的小姐姐"  xxxx@qq.com  < /root/qingshu/$Qingshu
    
    if  [ $? -eq 0 ];then
    	rm -f /root/qingshu/$Qingshu
    fi
    
    
    [root@qls qingshu]# ll
    total 20
    -rw-r--r-- 1 root root  85 Jul 31 11:49 qingshu1.txt
    -rw-r--r-- 1 root root 184 Jul 31 11:51 qingshu2.txt
    -rw-r--r-- 1 root root 121 Jul 31 11:51 qingshu3.txt
    -rw-r--r-- 1 root root 155 Jul 31 11:51 qingshu4.txt
    -rw-r--r-- 1 root root  70 Jul 31 11:52 qingshu5.txt
    
    
    #编写定时任务 
    
    [root@qls qingshu]# crontab  -l
    #同步系统时间 qls 20200731_10
    * * * * *  /usr/sbin/ntpdate  ntp.aliyun.com &>/dev/null
    #xxxxxxxxxx
    #* * * * *  /usr/bin/date +\%F_\%T >> /root/time.txt  
    #备份
    #* * * * *  /bin/bash   /root/backup.sh  &>/dev/null
    #xxxxxxxxx
    * * * * *  /bin/bash   /root/send_mail.sh  &>/dev/null
    
    
    

    6. day19作业讲解

    
    1.linux下常见的压缩包类型有哪些
    
    2.将/etc/hosts文件用tar格式打包。
    
    tar  czf  hosts.tar.gz  /etc/hosts
    
    
    3.查看打包之后的/etc/hosts的文件内容,在不解压的情况下查看。
    
    tar  tf  hosts.tar.gz
    
    4.使用tar打包/var/log/目录。
    
    tar  czf  log.tar.gz  /var/log/
    
    5.使用zip打包/etc目录。
    
    zip  -r  etc.zip  /etc
    
    6.查看/var/log/目录的压缩包中有哪些内容。
    
    tar  tf  log.tar.gz
    
    7.将/var/log/目录解压到/opt目录中。
    
    tar  xf  log.tar.gz  -C  /opt  
    
    
    10.解压/etc/目录到/opt目录中。
    
    
    unzip  etc.zip  -d  /opt  
    
    11.用zip打包/opt目录,要求不显示打包过程。
    
    zip  -rq  opt.zip  /opt  
    
    12.打包/etc/目录,要求是.bz2格式
    
    tar cjf  etc.tar.bz2  /etc/
    
    13.打包/var/log目录,要求是.xz格式
    
    
    tar cJf  log.tar.xz  /var/log
    
    14.使用tar命令打包/etc/时,会出现一个删根的操作,怎样打包不会进行删根的操作
    
    tar czPf  etc.tar.gz  /etc
    
    cd  /
    
    tar czf  /root/etc.tar.gz  /etc  
    
    
    15.打包/etc/目录,要求不打包/etc/hosts这个文件。
    
    tar czf  etc.tar.gz    --exclude=/etc/hosts   /etc/
    
    
    16.打包/etc/目录,要求不打包/etc/hosts和/etc/hostname这两个文件。
    
    tar czf  etc.tar.gz    --exclude=/etc/{hosts,hostname}   /etc/
    
    17.打包/etc/目录,但要排除passwd,shadow,group,gshadow,hosts,hostname这些文件。(你能用两种方法实现吗)
    
    vim  paichu.list
    /etc/passwd
    /etc/shadow
    /etc/group
    /etc/gshadow
    /etc/hosts
    /etc/hostname
    
    tar  czfX  etc.tar.gz   paichu.list  /etc
    
    
    18.已知/etc/grub2.cfg文件是个软连接文件,在你不知道的情况下,请问怎么打包该文件的真实文件。
    
    tar  czhf  grub.tar.gz  /etc/grub2.cfg
    
    19.把/var/log/目录中所有.log的文件进行打包成一个压缩包,名称定义为log.tar.gz的压缩包。
    
    find  /var/log  -type  f  -name "*.log"  | xrags  tar czf  log.tar.gz  
    
    
    
    20.已知文件oldboy.gz,请问在不解压的情况下,怎样查看该文件的内容。
    
    zcat   oldboy.gz
    
    
    21.打包/etc/目录,命令以ip地址+当前时间方式的压缩包:比如: 10.0.0.100_2019-12-24_etc.tar.gz
    
    
    tar  czf  $(ifconfig eth0 | awk  'NR==2{print $2}')_$(date +%F)_etc.tar.gz  /etc
    
    
    22.创建/data/bak目录,然后复制如下文件到/data/bak目录下
    /etc/hosts
    /etc/resolv.conf
    /etc/fstab
    /etc/bashrc
    /etc/profile
    /etc/rc.local
    /etc/sudoers
    
    23.接22题,使用tar命令对/data/bak目录下的文件及目录以gzip的格式进行归档压缩到/data目录下(压缩包的名字以自己名字命名)
    
    tar  czf  /data/qls.tar.gz  /data/bak
    
    
    24.使用tar命令查看上题/data目录下压缩包内的内容。
    
    tar tf  /data/qls.tar.gz
    
    
    25.把第23题/data目录下的压缩包,解压到/backup目录下
    
    mkdir  /backup
    
    tar  xf  /data/qls.tar.gz  -C  /backup
    
    26.再次使用tar命令把/data/bak目录下的文件及目录以gzip的格式进行归档压缩到/data目录下,但是在进行归档压缩时,排除文件“sudoers”,然后查看该压缩包内容是否存在文件“sudoers”(压缩包名自行拟定)
    
    tar  czf  /data/qls.tar.gz   --exclude=/data/bak/sudoers      /data/bak
    
    
    27.打包/etc目录下所有普通文件到root用户家目录。
    
    find  /etc/  -type  f  | xargs  tar czf  /root/file.tar.gz   
    
    
    28.打包/etc/目录到/opt/目录下,名称要求以当前主机名和ip地址命名,例:oldboy_10.0.0.100.tar.gz
    
    
    tar  czf  /opt/$(hostname)_$(date +%F)_etc.tar.gz  /etc
    
    29.如何使用gzip命令对文件进行压缩、解压
    
    
    gzip   file.txt
    
    gzip -d  file.txt.gz 
    
    
    30.如何用zip命令对文件以及目录进行压缩、解压
    
    zip  file.txt.zip   file.txt
    
    zip  -r  etc.zip  /etc  
    
    unzip  etc.zip
    
    
    unzip  etc.zip  -d  /opt  
    
    31.创建一个自己名字的文件至/opt目录
    
    32.打包opt整个目录,并命名test_opt.tar.gz
    
    tar  czf  test_opt.tar.gz  /opt 
    
    33.查看打包好的test_opt.tar.gz里的文件
    
    tar tf test_opt.tar.gz
    
    34.将打包好的test_opt.tar.gz内容指定解压至/tmp目录
    
    tar xf  test_opt.tar.gz  -C  /tmp
    
    
    35.打包etc目录下的所有文件,不要目录只要文件
    
    find  /etc   !  -type  d  -exec  cp  {}  /opt/  \;
    
    tar czf opt.tar.gz  /opt
    
    
    
    find  /etc   !  -type  d  | xargs  tar czf  file.tar.gz  
    
    
    
    36.打包etc目录下的所有文件,排除passwd,shadow
    
    tar  czf  etc.tar.gz  --exclude=/etc/{passwd,shadow}  /etc
    
    
    37.打包etc目录下的所有以p开头的文件
    
    find  /etc/  -type f  -name "p*"  | xargs  tar czf  p.tar.gz  
    
    
    38.打包etc目录下所有大于1M的文件
    
    find  /etc/  -type  f  -size +1M   | xargs  tar czf  big_file.tar.gz
    
    
    
    展开全文
  • 从0到1学习FreeRTOS:FreeRTOS 内核应用开发:(五)任务管理 NO.1 概念讲解 目录 一、任务的基本概念: 二、任务调度器的基本概念: 三、任务状态概念: 四、任务状态迁移: 一、任务的基本概念: ① 在...
  • 上一篇文章中我们了解了什么是回调,也知道了什么是同步回调和异步回调,学习了一个XMLHttpRequest的完整流程,这次我们再说一下宏任务和微任务概念 随着浏览器的应用越来越广泛,消息队列这种粗粒度的事件管理...
  • 定时任务管理

    2021-03-28 23:39:03
    定时任务管理 文章目录列表 源码包管理 定时任务的概念 定时任务相关介绍 定时任务案例 定时发邮件 源码包管理 要有源码包 下载源码包 [root@qls ~]# wget http://nginx.org/download/nginx-1.18.0.tar.gz ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 6,977
精华内容 2,790
关键字:

任务管理概念