需要注意的是crontab里的cron表达式并不是标准的,它有自己的格式
* * * * * command
M H D m d command
分 时 日 月 周 命令
第1列表示分钟1~59 每分钟用*或者 */1表示
第2列表示小时1~23(0表示0点)
第3列表示日期1~31
第4列表示月份1~12
第5列标识号星期0~6(0表示星期天)
第6列要运行的命令或脚本内容
图片中是每5分钟运行一次 *.sh脚本 ,脚本里是sql命令: mysql -uroot -p'xxx' 库名 -e "sql语句"
crontab不能设置秒级运行,如果需要每隔5秒运行一次,可以将*.sh写成每5秒执行一次cleanSignStatus.sh的shell脚本.
比如 crontab -e:标记定时任务:***** command sh xxx/crontab.sh
crontab.sh内容:
#!/bin/bash
step=1 #间隔的秒数,不能大于60
for (( i = 0; i < 60; i=(i+step) )); do
$(sh /home/hap1/cleanSignStatus.sh)
sleep $step
done
exit 0
crontab.sh需要有可执行权限
写一个启动java的脚本文件startup.sh(这个脚本文件要和启动jar包放到同一目录下):
#!/bin/bash
nohup java -Xms1024M -Xmx1024M -XX:+PrintGCDetails -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/javaapp/eMeeting-uat/file-upload/dump -jar file-upload-0.0.1-SNAPSHOT.jar >/dev/null 2>&1 &
/dev/null:表示标准输出重定向到空设备文件,也就是不输出任何信息到终端,不显示任何信息。
2>&1:表示标准错误输出重定向等同于标准输出,因为之前标准输出已经重定向到了空设备文件,所以标准错误输出也重定向到空设备文件。
这条命令的意思就是在后台执行这个程序,并将错误输出2重定向到标准输出1,然后将标准输出1全部放到/dev/null文件,也就是清空.
所以可以看出" >/dev/null 2>&1 "常用来避免shell命令或者程序等运行中有内容输出。
如果不加>/dev/null 2>&1 ,输出内容会在nohup.out里,加上后不会输出到nohup.out,如果项目中有logback-spring.xml等配置文件,则会按配置文件配置的目录保存输出内容,如果启动命令没有>/dev/null 2>&1并且项目用了logback-spring.xml,那输出日志会在nohup.out和logback配置目录下存在两份.