crontab的默认执行路径问题

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

如下,我们成功的更改了路径。

发表评论

电子邮件地址不会被公开。 必填项已用*标注

Scroll Up