我在/home/dmbot/
中有一个Python脚本/home/dmbot/
的内容是:
root@alpha:~/dmbot# ls -lah
total 40K
-rw-r--r-- 1 root root 1.7K Dec 27 18:14 accounts.py
-rw-r--r-- 1 root root 185 Dec 27 18:14 config.py
drwxr-xr-x 2 root root 4.0K Dec 27 18:14 followers
-rwxr-xr-x 1 root root 1.8K Dec 27 18:35 script.py
drwxr-xr-x 2 root root 4.0K Dec 27 18:14 tokens
当我在
/home/dmbot/
上从外壳运行脚本时,它可以正常工作,但是我正在尝试从cron运行它。我在crontab上添加了以下行:
12 19 * * * /usr/bin/python /root/dmbot/script.py
当cron运行时,我会在我的根电子邮件中收到此消息:
Traceback (most recent call last):
File "/root/dmbot/script.py", line 5, in <module>
execfile('tokens/acc1.py', globals())
IOError: [Errno 2] No such file or directory: 'tokens/acc1.py'
由于从外壳程序执行它时效果很好,为什么在cron运行它时它不起作用?我是否需要为整个脚本设置绝对路径?
我在本地计算机上编码了脚本,然后将其上传到Ubuntu服务器。如果我在整个脚本上设置绝对路径,则必须维护两个脚本,因为我的计算机的文件夹结构与Ubuntu服务器不同。
有没有解决方法?
最佳答案
您可以将crontab设置为将目录更改为运行脚本之前需要运行的目录:
12 19 * * * cd /home/dmbot ; ./script.py
然后在另一台计算机上,只要将crontab设置为cd即可。