1.配置Linux任务计划
Linux有三种计划任务:
at:指定一个时间执行一个任务 (适用一个或多个任务,执行一次后就不用)
cron:根据一个时间表自动执行任务 (使用一个或多个任务,周期性执行)
系统级别的计划任务及其扩展anacron:在一个指定时间间隔错过后自动执行任务
对于cron命令例如:
* * * * * wall hello everyone
5个星号分别代表:minute hour day-of-month month-of-year day-of-week 分时日月周
上面的意思是每分每小时每天每月每周广播hello everyone
如果我要表示9月10日25分执行/home/test/xxxx.sh任务怎么表示?
25 * 10 9 * /home/test/xxxx.sh
参考 http://blog.sina.com.cn/s/blog_5fd841bf0100q44p.html
#crontab -e 编辑当前用户的cron表
#crontab -l 查看当前用户的cron表
#crontab -r 删除当前用户的cron进程
#crontab -u 用户名
2.cron指令不能带环境变量
在cron中运行sh file时候,如果调用java命令,有时候会报错:Error:java: command not found
这个是因为没有设置环境变量。
设置环境java_home等环境变量
#!/bin/bash export JAVA_HOME=/usr/java/jdk1.6/ export CLASSPATH=$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/td.jar:$JAVA_HOME/jre/lib/rt.jar:. export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH
如果只有JRE的话,
export CURRENT_DIR=`pwd` #REM CURRENT_DIR is the current directory. export CLASSPATH=$CURRENT_DIR export PATH=$CURRENT_DIR/jre/bin #REM set path,please notice the upper case and lower case. for filename in `ls jre/lib/*.jar` do filename1=$filename1:$filename done export CLASSPATH=$CLASSPATH$filename1 java -cp $CLASSPATH -jar xxxx.jar
3.在windows 下编辑sh 文件,在linux上运行出错,或者就是command not found
原因是CR/LF问题,在dos/window下按一次回车键实际上输入的是“回车(CR)”和“换行(LF)”,而linux/unix下按一次回车键只输入“换行(LF)”,所以修改的sh文件在每行都会多了一个CR,所以linux下运行时就会报错找不到命令。
解决办法:
1、在editplus中“文档->文件格式(CR/LF)->UNIX”,这样linux下就能按unix的格式保存文件
2、在vim中,输入:setff=unix,同样也是转换成unix的格式。
3、使用UltraEdit中打开.sh文件,按Ctrl+H切换到16位状态,搜索0D,删除之,然后保存就可以
或者 设置文件 ->转换->DOS->UNIX
或者 修改完毕后需要点击文件->设置另存为,编码方式选为UTF-8-无BOM,保存
4、bash与sh 的区别
我们所使用的系统当中,使用sh调用执行脚本,相当于打开了bash的POSIX标准模式 (等效于bash的 --posix 参数)
一般的,sh是bash的“子集” (不是子集的部分,具体区别见下的“Things sh has that bash does not”)。
在bash程序执行,当“$0”是“sh”的时候, 则要求下面的代码遵循一定的规范,当不符合规范的语法存在时,则会报错, 所以可以这样理解, “sh”并不是一个程序,而是一种标准(POSIX), 这种标准,在一定程度上保证了脚本的跨系统性(跨UNIX系统)。