1、无论是sh文件还会jar包一定需要给出绝对路径,我本来以为在它们所在的文件夹下设置crontab就可以不用设置绝对路径了,但是不可以!一定一定要写绝对路径!(可以用pwd命令查看绝对路径)除此之外还有一种办法是在命令里:cd 绝对路径 && 运行的命令
如我每一分钟执行一个叫/library.sh文件(它在 /root/文档/嵌入式/课设中),并将其输出内容定向输入到iii.txt中
* /1 * * * * cd /root/文档/嵌入式/课设&& sh library.sh >>iii.txt
注意在这时,你的sh文件不一定能运行成功,因为crontab找不到sh命令,于是有了第二点
2、编辑crontab设置任务时,直接运行sh命令和java -jar命令是不会被识别的,一定在使用时要带上它们的环境变量,sh命令要写成/bin/bash sh (绝对路径)/xxx.sh或者在xxx.sh文件的“#!/bin/bash”后一行写上“source /etc/profile”;对于jar包,则先用which java找到java执行路径,然后再运行jar包。
对于上述的例子有两种方法:
方法一:在library.sh中导入环境变量:source /etc/profile
* /1 * * * * cd /root/文档/嵌入式/课设&& sh library.sh >>iii.txt
方法二:在sh前面加入其环境变量
* /1 * * * * cd /root/文档/嵌入式/课设&& /bin/bash/sh library.sh >>iii.txt
如果我运行一个jar包,我的路径如下:
我在crontab -e里面编辑运行我的jar包时,设置为:
*/1 * * * * cd /root/文档/嵌入式/课设&&/opt/jdk1.8.0_311/bin/java -jar libraryTest.jar 1730 >>ooo.txt
表示我在每一分钟都会切到/root/文档/嵌入式/课设这个文件夹中,/opt/jdk1.8.0_311/bin/java是我的java的执行路径,libraryTest.jar是我要执行的jar包,它在/root/文档/嵌入式/课设这个文件夹中,1730是我后面的jar包的命令行参数,>>ooo.txt是把我运行jar包产生的输出信息全部放在一个叫ooo.txt的文件中。
3、crontab设置的任务里有在屏幕上打印信息时,它不会真的在屏幕上打印,因此你需要设置把这些打印信息都定向输入到一个文件里。
4、可以通过tail -f /var/log/cron.log观察crontab究竟是运行了但是任务失败了,还是根本没有运行。