尽管crontab

问题描述

我有一个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