菜鸟学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