菜鸟学Linux 第037篇笔记 脚本知识、实现任务计划

  1. 云栖社区>
  2. 博客>
  3. 正文

菜鸟学Linux 第037篇笔记 脚本知识、实现任务计划

科技探索者 2017-11-06 17:28:00 浏览847
展开阅读全文

菜鸟学Linux 第037篇笔记 脚本知识、实现任务计划 




cross compile: 交叉编译

x86, 32bit, 此平台编译一个程序无法在其它平台上运行

ARM


用A平台编译非A平台上运行程序的编译方式称为交叉编译



如何实现部分编译

1、只编译某子目录下的相关代码

make dir/subdir


2、只编译部分模块

make M=drivers/net


3、只编译某一模块

make drivers/net/pcnet32.ko

4、将编译完成的结果放置于其它目录中

make O=/root/kernel

6、交叉编译

make ARCH=

脚本编程知识点

1、取变量中字符的长度:${#VAR_NAME}

unset 取消变量的值

2、变量赋值

${parameter:-word} 如果parameter值为空或未定义则展开为"word", 否则展开该变量的值

${parameter:+word} 如果parameter值为空或未定义,不做任何操作;否则展开为world值

此上两种不会修改parameter本身的值

${parameter:=word} 如果parameter值为空或未定义,则变量展开为"word"

并且将展开后的值赋值给parameter


${parameter:offset:length} 取字串,从offset处的后一个字符开始,取lentgh个字串

${parameter:offset}  如果未指定length则取到尾


3、脚本配置文件

. /etc/inittab 在脚本里插入此行证明.后所跟的路径文件被引用到当前脚本中

/etc/rc.d/init.d/服务脚本

这些服务脚本支持配置文件:/etc/sysconfig/服务脚本同名的配置文件


4、定义局部变量

语法 local VAR_NAME=

如果函数中的变量和全局变量重名如果函数里的变量未加local会影响全局的变量

a=1

test() {

  local a=$[3+4]

}


test

for I in `seq $a 10`; do

echo $I

done


5、命令mktemp

创建临时文件或目录

mktemp /tmp/file.XX 

-d 临时目录 将其值保存在变量里,以后就可以拿来引用


6、信号

kill -SIGNAL PID

1 HUP

2 INI

9 KILL

15 TERM

SIGHUP        1       Term    Hangup detected on controlling terminal

                                  or death of controlling process

SIGINT        2       Term    Interrupt from keyboard

SIGQUIT       3       Core    Quit from keyboard

SIGILL        4       Core    Illegal Instruction

SIGABRT       6       Core    Abort signal from abort(3)

SIGFPE        8       Core    Floating point exception

SIGKILL       9       Term    Kill signal

SIGSEGV      11       Core    Invalid memory reference

SIGPIPE      13       Term    Broken pipe: write to pipe with no readers

SIGALRM      14       Term    Timer signal from alarm(2)

SIGTERM      15       Term    Termination signal

脚本中,能实现信号捕捉,但9和15无法捕捉

Ctrl+c: SIGINT


trap 命令

语法 trip 'COMMAND' 信号列表


7、一行执行多个语句,语句间用分号分隔

捕捉中断可以定义函数(建议中断时清理脚本所产生的垃圾文件)



如何实现任务计划


1.在未来的某个时间点执行一次某任务

at

语法

at time

at> COMMAND

AT> Ctrl+d

指定时间

绝对时间 HH:MM, DD.MM.YY MM/DD/YY

相对时间 now+#

单位 minutes, hours, weeks

模糊时间 noon, midnight, teatime(下午四点),

命令的执行结果:将会以邮件的形式发送给安排任务的用户 

-l|atq 显示任务

at -d AT_JOB_ID = atrm AT_JOB_ID 删除任务

The  superuser  may  use  these  commands  in any case.  For other

users,  permission  to  use  at  is  determined   by   the   files

/etc/at.allow and /etc/at.deny.


If  the  file /etc/at.allow exists, only usernames mentioned in it

are allowed to use at.


If /etc/at.allow does not exist, /etc/at.deny  is  checked,  every

username not mentioned in it is then allowed to use at.


If neither exists, only the superuser is allowed use of at.


An  empty  /etc/at.deny means that every user is allowed use these

commands, this is the default configuration.


The at daemon can be  configured  through  the  /etc/sysconfig/atd

configuration file, which contains examples of settings.

batch

执行格式与at相同,但不需要指定时间,会在空闲时间自动执行

2.周期性的执行某任务

cron 自身是一个不间断运行的服务

(daemon to execute scheduled commands (ISC Cron V4.1))

anacron (runs commands periodically)cron的补充

能够实现让cron因为各种原因在过去的时间该执行而未执行的任务

在恢复正常时将其执行一次(服务器默认不启动)

cron:

系统cron任务(格式和用户的cron不同)

/etc/crontab

分钟 小时 天 月 周 用户 任务

用户cron任务

/var/spool/cron/USERNAME

分钟 小时 天 月 周 任务

cron时间定义

时间的有效取值

分钟 0-59

小时 0-23

 1-31

 1-12

 0-7, 0和7都表示周日

时间通配表示

* 对应的所有有效取值

3 * * * * 每个小时第3分钟执行任务

3 * * * 7 周日每小时第3分钟执行任务

3 * 3 * 7 周日并且还是3号的每小时第三分钟执行任务

(第三个只做演示,一般周和天不建议同时指定)

离散时间点

10,40 02 * * 2,5 周二和周五的2:10和2:40分执行任务

- 连续时间点

10 02 * * 1-5 周一到周五的2:10执行任务

(注意不同,一个间断,一个连续)

/ 对应取值范围内每多久一次

*/3 * * * * 每三分钟执行一次任务

小练习 用上边的格式写出如下需求:

每两小时执行一次

01 */2 * * * 

每两天执行一次

01 01 */2 * *

注意大单位每多久执行一次时,小单位建议给具体值不然(你懂得)

cron执行结果将以邮件形式发送给管理员

*/3 * * * * cat /etc/fstab > /dev/null

这样执行的含义是正常的信息不会发mail给管理员重定向原理,前边章节讲过

cron的环境变量:cron执行所有命令都去PATH环境变量指定的路径下去寻找

PATH /bin:/sbin:/usr/bin:/usr/sbin

如果任务执行的是脚本,则在脚本中指定环境变量

#!/bin/bash

export PATH=



修改系统cron任务

修改/etc/crontab文件即可

修改用户cron任务

crontab (maintain  crontab files for individual users (ISC CronV4.1))

-l    The current crontab will be displayed on standard output. 

-e    This option is used to edit the current crontab  using  the

  editor  specified by the VISUAL or EDITOR environment vari-

  ables.  After  you  exit  from  the  editor,  the  modified

  crontab will be installed automatically.

-r    The current crontab will be removed.

-u USERNAME -e  作为管理员可以编辑其它用户的cron任务

最后如果想要任务执行必须确保cron服务处于启动状态(默认启动)

service crond {start|stop|restart|status}

anacron

/etc/anacrontab

service anacron {start|stop|restart|status}

20 3 */2 * * /

#!/bin/bash

#

export PATH=/bin

cd /

[ ! -d /backup/etc ] mkdir -p /backup/etc

tar -cjf /backup/etc/etc-`date +%Y-%m-%d`.tar.bz2 

本文转自Winthcloud博客51CTO博客,原文链接http://blog.51cto.com/winthcloud/1879950如需转载请自行联系原作者


Winthcloud

网友评论

登录后评论
0/500
评论
科技探索者
+ 关注