第十八天-linux系统定时任务crond深入实战

1.每隔1分钟,打印一个+号到oldboy.log,请给出crontab完整命令。

#printf + every minute
 *  *  *  *  * echo '+'>> /oldboy.log 

2.每隔2个小时将/etc/services文件打包备份到/tmp下(最好每次备份成不同的备份包)。
    (1)在命令行测试

root@xiaorui:~# ll /etc/services
-rw-r--r-- 1 root root 19605 10月 25  2014 /etc/services
root@xiaorui:~# cd /etc/
root@xiaorui:/etc# tar zcvf /tmp/services_$(date +%F-%H).tar.gz ./services

    (2)编写脚本:

vim /server/scripts/tar.sh
#every two hour tar /services to tmp
cd /etc/
tar zcf /tmp/services_$(date +%F-%H).tar.gz ./services

    (3)编写crontab -e

#every two hour tar /etc/services to tmp
00  */2  * * * /bin/sh /server/scripts/tar.sh >/dev/null 2>&1

    技巧:
    1、命令行测试好,规范脚本存放路径。
    2、定时任务打包或处理其他工作,不要在屏幕输出,可以放到日志文件里。
    3、从定时任务到脚本的工程尽量复制,防止重敲错。    
    4、执行脚本要叫/bin/sh
    5、结尾定向到空,>/dev/null 2>&1
3.每天晚上12点,打包站点目录/var/www/html备份到/data目录下(最好每次备份按时间生成不同的备份包)。
    解答:
    查看脚本:

cat tar.site.sh
cd /var/www && tar zcfp /data/html_$(date +%Y%m%d).tar.gz ./html

    定时任务:

##tar /var/www/html by shell scrpt by xiaorui at 20151201
00 00 * * * /bin/sh /server/scripts/tar_site.sh >/dev/null 2>&1

4.每周六、日上午9:00和下午14:00来老男孩这里学习(执行程序/server/script/oldboy.sh代替学习)。

##study from oldboy at 9:00 and 14:00 on sat and sun    
00 9,14 * * 6,7 /bin/sh /server/script/oldboy.sh >/dev/null 2>&1

5.请描述下列路径的内容是做什么的?
    /etc/sysctl.conf    和系统内核优化有关
    /etc/rc.local         开机自启动任务的配置文件
    /etc/hosts            域名解析文件
    /etc/fstab             系统开机时自动挂载所有分区的配置文件
    /var/log/secure    系统安全日志,记录用户登陆本机的信息
6.添加一个用户oldboy,并指定属于sa组,要求组ID为801,uid为808,并且不创建家目录及禁止其登陆。

groupadd -g 801 sa
useradd -g sa -u 808 oldboy -M -s /sbin/nologin
xiaorui@xiaorui:~$ useradd --help

用法:useradd [选项] 登录
        useradd -D
           useradd -D [选项]
选项:
    -b, --base-dir BASE_DIR       新账户的主目录的基目录
    -c, --comment COMMENT         新账户的 GECOS 字段
    -d, --home-dir HOME_DIR         新账户的主目录
    -D, --defaults               显示或更改默认的 useradd 配置
    -e, --expiredate EXPIRE_DATE  新账户的过期日期
    -f, --inactive INACTIVE          新账户的密码不活动期
    -g, --gid GROUP               新账户主组的名称或 ID
    -G, --groups GROUPS        新账户的附加组列表
    -h, --help                          显示此帮助信息并推出
    -k, --skel SKEL_DIR          使用此目录作为骨架目录
    -K, --key KEY=VALUE                 不使用 /etc/login.defs 中的默认值
    -l, --no-log-init              不要将此用户添加到最近登录和登录失败数据库
    -m, --create-home          创建用户的主目录
    -M, --no-create-home            不创建用户的主目录
    -N, --no-user-group          不创建同名的组
    -o, --non-unique             允许使用重复的 UID 创建用户
    -p, --password PASSWORD        加密后的新账户密码
    -r, --system                        创建一个系统账户
    -R, --root CHROOT_DIR             chroot 到的目录
    -s, --shell SHELL             新账户的登录 shell
    -u, --uid UID                       新账户的用户 ID
    -U, --user-group              创建与用户同名的组
    -Z, --selinux-user SEUSER          为 SELinux 用户映射使用指定 SEUSER

7.老男孩老师定时任务总结:

  书写的方法:
  要领1:为定时任务规则加必要的注释
  要领2:执行shell脚本任务前加/bin/sh
  要领3:定时任务命令或脚本结尾加>/dev/null 2>&1
  要领4:定时任务命令或程序最好写到脚本里执行
  要领5:在指定用户下执行相关定时任务
  要领6:生产任务程序不要随意打印输出信息 tar zcf echo 123 >a.log
  要领7:定时任务执行的脚本要规范路径
  要领8:配置定时任务的规范操作过程

  工作中调试定时任务的方法:
  1、增加执行任务的频率调试任务(某些任务不能用于生产环境)
  2、调整系统时间调试任务(不能用于生产环境)
  3、通过脚本日志输出调试定时任务
  4、注意一些任务命令带来的问题
  5、注意环境变量导致的定时任务故障
  6、通过crond定时任务服务日志调试定时任务
  7、其他稀奇古怪的问题调试的方法

  crontab定时任务生产应用问题箴言:
  1、系统环境变量问题
  2、定时任务要用绝对路径
  3、脚本权限问题,要用/bin/sh
  4、时间变量问题用反斜线转义 例如:\%
  5、>/dev/null 2>&1问题
  6、定时任务规则之前加注释
  7、使用脚本程序替代命令行定时任务
  8、避免不必要的程序及命令输出
  9、切到目标目录的上一级打包目标
  10、定时任务脚本中的程序命令用全路径

8.


9.linux定时任务生产java服务无法执行问题群友案例
  http://oldboy.blog.51cto.com/2561410/1541515

原文地址:https://www.cnblogs.com/migongci0412/p/5008936.html