#! /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 | #!/bin/bash |
参考链接: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 | 第一个“*” 一小时当中的第几分钟 0-59 |
https://blog.csdn.net/qq_41283044/article/details/90701074
实操
1 | sudo crontab -e //编写任务 |
原文链接:https://blog.csdn.net/ren593669257/article/details/95455245
命令也能这么写,比如
1 | */1 * * * * /bin/bash /etc/init.d/test.sh 此命令每分钟执行一次test.sh脚本 |
其他
cron运行日志
1 | cron运行日志在/var/log/cron.log,ubuntu默认没有开启cron日志,所以当Ubuntu服务器/var/log下没有cron日志,如何使用ubuntu server查看crontab记录日志 |
原文链接:
https://blog.csdn.net/xiaoguo1001/article/details/80512906
https://blog.csdn.net/weixin_43946245/article/details/103184208
如果只是简单的任务,可以不用写脚本,直接在crontab中加入任务即可,对于比较复杂的任务,需要写脚本(shell编程)
定时任务 调用接口
1 | 0 */1 * * * php /dat0/web/dev02/yii send/expire |