Python 尽管有 crontab,但脚本不会在 AWS 服务器重启时启动

Python scripts don't start on AWS server reboot despite 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

.(如单点符号,后跟 space)在 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