#! /bin/bash
linux shell脚本中的开头 #! /bin/bash的含义
很多时候不规范的写法可以忽略掉这一句,执行起来好像也是ok,结果没什么不一样 。这只是因为在我们常用 的linux系统上默认都是执行/bin/bash来执行我们的shell脚本,但是如果有些用户使用的是csh,那么缺少第一行的“#!/bin/bash的shell脚本执行结果就可能存在语法不兼容的问题,导致结果异常或者根本不能执行。
Shell脚本和我们常用的C语言或者C++语言编写编译出来的bin执行当不一样,shell是一种解释性语言,他需要专门的解析器来解析然后执行,不同的脚本语言需要匹配对应的解析器才能解析执行,比如python也是一中解释性编程语言,需要对应的ptthon解释器来解析执行。
我们linux上的shell 是bash shell,所以我们在编写一个脚本的时候需要在第一行添加”#!/bin/bash“. 这句话的意思是告诉执行器需要调用/bin/bash来执行我。
这也是在shell中唯一以#号开头却不代表是注释的意思,其他任何地方以#号开头的语句都会被认为是注释语句而忽略执行,所以这句话只能写在 shell的开头才有效。
1 2 3 4 5 6 7 8 9 10 11 12
   | #!/bin/bash
  #this is a test shell
  pwd
  #this is a comment
  who
  #show date date
   | 
 
参考链接:https://www.cnblogs.com/tid-think/p/10961490.html
linux命令 执行和停止一个定时任务
 定时任务编写
| 顺序 | 
 | 
分 | 
时 | 
日期 | 
月份 | 
星期 | 
年(可选) | 
| 取值 | 
 | 
0-59 | 
0-23 | 
1-30(31) | 
1-12 | 
1-7 | 
 | 
| 允许特殊字符 | 
 | 
, - * / | 
, - * / | 
, - * / ? L W C | 
, - * / | 
, - * / L # C | 
1970-2099 , - * / | 
*:代表所有可能的值
-:指定范围
,:列出枚举  例如在分钟里,"5,15"表示5分钟和20分钟触发
/:指定增量  例如在分钟里,"3/15"表示从3分钟开始,没隔15分钟执行一次
?:表示没有具体的值,使用?要注意冲突
L:表示last,例如星期中表示7或SAT,月份中表示最后一天31或30,6L表示这个月倒数第6天,FRIL表示这个月的最后一个星期五
W:只能用在月份中,表示最接近指定天的工作日
#:只能用在星期中,表示这个月的第几个周几,例如6#3表示这个月的第3个周五
1 2 3 4 5 6 7 8 9 10 11 12 13 14
   | 第一个“*”  一小时当中的第几分钟  0-59 第二个“*” 一天当中的第几小时  0-23 第三个“*” 一个月当中的第几天  1-31 第五个“*”一周当中的星期几 0-7(0和7都代表星期日)
  例如: 45 22 * * * 命令     在22点45分执行命令 0 17 * * 1 命令    每周1 的17点0分执行命令 0 5 1,15 * * 命令    每月1号和15号的凌晨5点0分执行命令 40 4 * * 1-5 命令    每周一到周五的凌晨4点40分执行命令 */10 4 * * * 命令    每天的凌晨4点,每隔10分钟执行一次命令 0 0 1,15 * 1 命令    每月1号和15号,每周1的0点0分都会执行命令
  注意:星期几和 几号最好不要同时出现,因为他们定义的都是天。非常容易让管理员混乱。
   | 
 
https://blog.csdn.net/qq_41283044/article/details/90701074
实操
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
   | sudo crontab -e   //编写任务
  ^G 求助      ^O 写入      ^W 搜索      ^K 剪切文字  ^J 对齐      ^C 游标位置 ^X 离开      ^R 读档      ^\ 替换      ^U 还原剪切  ^T 拼写检查  ^_ 跳行
  例如:离开——ctrl+X ———————— */1 * * * *  /bin/sh /home/XXX/note/test.sh >> /home/XXX/note/test.log 每分钟执行一次,将/home/XXX/note/test.sh的执行结果追加入/home/XXX/note/test.log ———————— ctrl+x ,回车  // 保存,退出 sudo service cron restart 重启任务——成功
  sudo crontab -e//编辑任务 sudo crontab -l  //查询crontab任务 sudo crontab -r //删除当前用户所有的crontab任务 格式: crontab [-u user] file crontab [-u user] [ -e | -l | -r ]
  参数说明:
  -u user:用来设定某个用户的crontab服务,例如,“-u ixdba”表示设定ixdba用户的crontab服务,此参数一般有root用户来运行。
  file:file是命令文件的名字,表示将file做为crontab的任务列表文件并载入crontab。如果在命令行中没有指定这个文件,crontab命令将接受标准输入(键盘)上键入的命令,并将它们载入crontab。
  -e:编辑某个用户的crontab文件内容。如果不指定用户,则表示编辑当前用户的crontab文件。
  -l:显示某个用户的crontab文件内容,如果不指定用户,则表示显示当前用户的crontab文件内容。
  -r:从/var/spool/cron目录中删除某个用户的crontab文件,如果不指定用户,则默认删除当前用户的crontab文件。
  -i:在删除用户的crontab文件时给确认提示。
   | 
 
原文链接:https://blog.csdn.net/ren593669257/article/details/95455245
命令也能这么写,比如
1 2 3
   | */1 * * * * /bin/bash /etc/init.d/test.sh  此命令每分钟执行一次test.sh脚本 或 1 * * * * cd /etc/init.d && ./test.sh >> /home/loganalysis/error.log 2>&1 此命令执行shell脚本文件,并记录日志
   | 
 
其他
cron运行日志
1 2 3 4 5 6 7 8 9 10 11 12
   | cron运行日志在/var/log/cron.log,ubuntu默认没有开启cron日志,所以当Ubuntu服务器/var/log下没有cron日志,如何使用ubuntu server查看crontab记录日志 //修改rsyslog sudo vim /etc/rsyslog.d/50-default.conf cron.* /var/log/cron.log #将cron前面的注释符去掉 //重启rsyslog sudo service rsyslog restart sudo service cron restart //查看crontab日志 tail -f /var/log/cron.log
  不需要保留执行的输出,则重定向到null中:>/dev/null 2>&1(忽略日志输出)   例如 * * * * * cd /home/wang && ./temp.sh >/dev/null 2>&1
   | 
 
原文链接:
https://blog.csdn.net/xiaoguo1001/article/details/80512906
https://blog.csdn.net/weixin_43946245/article/details/103184208
如果只是简单的任务,可以不用写脚本,直接在crontab中加入任务即可,对于比较复杂的任务,需要写脚本(shell编程)
定时任务 调用接口
1 2
   | 0 */1 * * * php /dat0/web/dev02/yii send/expire 调用Yii2.0框架send控制器下的expire接口
   |