问题描述
我有一个ec2实例并创建了2个python文件,我想在实例启动时立即运行它们。这些文件分别称为config.py
和start_elastic.py
,位于/ home / ubuntu /中。
我尝试了几种选择来使其启动(使用systemd,在init.d中定位它等),但没有任何效果。现在有人告诉我,要走的路是使用crontab。所以我做了以下事情:
sudo crontab -e
@reboot . /home/ubuntu/config.py
@reboot . /home/ubuntu/start_elastic.py
很遗憾,没有任何反应。这些文件是可执行文件(chmod +x filename
)。有谁知道为什么它不起作用?。
python文件看起来像这样:
#!/usr/bin/python3
import os
import yaml
from requests import get
import socket
hostname = socket.gethostname()
private = socket.gethostbyname(hostname)
public = get('https://api.ipify.org').text and so on
解决方法
shell中的
.
(如单点符号,后跟空格)等效于source
命令,因此,基本上,您尝试将python脚本中的每一行都作为shell命令执行,即当然不是您想做的事。
假设设置了chmod +x
,执行脚本的正确方法是
@reboot /home/ubuntu/config.py
@reboot /home/ubuntu/start_elastic.py
但是,为清楚起见,我建议像这样在cronjob中显式声明解释器
@reboot /usr/bin/python3 /home/ubuntu/config.py
@reboot /usr/bin/python3 /home/ubuntu/start_elastic.py