crontab的默认执行路径问题
閱讀本文約花費: 2 (分鐘)
在Linux下,执行路径经常会影响一个程序的执行结果,最近用到crontab命令,好奇crontab的默认执行路径。
结论:
crontab的默认执行路径为:当前用户的根路径。
如果希望改变执行路径,可以通过简单的shell编程的方式(见下文)。
如果不确定执行的路径,可以通过shell编程的方式去调用程序。
1. 实验测试
1.1 查看我们的根路径:
# cd ~ # pwd 12
这里的根路径:/root
1.2 然后我们在根路径创建一个测试目录:
# mkdir -p d1/d2/d3 1
1.3 在该路径下,我们写一个python程序,输出当前路径。
# vim test.py 1
import os print(os.getcwd()) 12
1.4 运行该程序:
# python test.py >> out.log 1
1.5 查看输出结果:
# cat out.log 1
输出结果如下:
/root/d1/d2/d3 1
1.6 然后我们在crontab中定时调度该脚本,并把结果打印到another.log中:
*/1 * * * * python /root/d1/d2/d3/test.py >> /root/d1/d2/d3/another.log 1
1.7 一分钟后查看another.log的结果:
/root 1
发现路径是/root,也就是当前用户的根路径。
验证了 crontab的默认执行路径为:当前用户的根路径。
那么接下来,我们如何切换crontab执行的路径呢?
2. 更改程序在crontab中的执行路径
其实很简单,通过简单的shell编程即可:
2.1 我们在 /root/d1/d2/d3 路径下,在创建一个start_test.sh(注意增加可执行权限 chmod 777 start_test.sh)文件:
cd /root/d1/d2/d3 python test.py >> sh.log 12
2.2 然后配置到crontab中:
*/1 * * * * sh /root/d1/d2/d3/start_test.sh 1
2.3 一分钟后查看sh.log,发现打印的是我们想要的文件路径:
/root/d1/d2/d3 1
如下,我们成功的更改了路径。