在 Ubuntu 上启动时启动一个 python 脚本

erj*_*jon 0 python linux python-2.7

我是 python 新手,对 Linux 有相当基本的了解。

我需要在 Ubuntu 14.04.3 服务器上启动时启动一个脚本。

唯一的问题是,脚本是一个监控工具,应该一直运行,所以我不能只是定期进行 cron 调用。

我一开始发现了这个:用 cron 运行 python 脚本

我试图在 crontab 中添加这个:

@reboot python /path/to/script.py &
Run Code Online (Sandbox Code Playgroud)

还有这个:

@reboot /path/to/script.py &
Run Code Online (Sandbox Code Playgroud)

但它似乎不起作用。

我也看到了这个:如何使 python 脚本像 linux 中的服务或守护程序一样运行

主要答案是cron或 python 代码中的更改。

所以我的问题是:有没有另一种方法可以在启动时运行我的脚本并让它“永远”运行而不更改代码?

我向你保证,如果我不想更改代码,那不是因为懒惰,但如果这是唯一的选择,我会这样做。

其他信息(不知道是否有必要),我正在运行 Windows 并且可以通过 PuTTY 访问服务器。Python的版本是2.7

更新

这是 cron 日志:

Nov 27 15:57:03 trustyovh cron[760]: (CRON) INFO (pidfile fd = 3)
Nov 27 15:57:03 trustyovh cron[798]: (CRON) STARTUP (fork ok)
Nov 27 15:57:03 trustyovh cron[798]: (CRON) INFO (Running @reboot jobs)
Nov 27 15:57:03 trustyovh CRON[807]: (administrateur) CMD (/home/administrateur/scuMonitor/main.py &)
Nov 27 15:57:03 trustyovh CRON[800]: (CRON) info (No MTA installed, discarding output)
Nov 27 16:09:01 trustyovh CRON[1792]: (root) CMD (  [ -x /usr/lib/php5/maxlifetime ] && [ -x /usr/lib/php5/sessionclean ] && [ -d /var/lib/php5 ] && /usr/lib/php5/sessionclean /var/lib/php5 $(/usr/lib/php5/maxlifetime))
Run Code Online (Sandbox Code Playgroud)

这是 crontab :

@reboot /home/administrateur/scuMonitor/main.py &
Run Code Online (Sandbox Code Playgroud)

更新 2

好吧,它实际上是在将 cron 设置为重新启动的情况下工作的,但是,我的脚本没有将他的日志放在我期望的位置(我不了解该路径在 Linux 上是如何工作的)。

谢谢大家的回答!

小智 5

我会建议你我在这里写的同样的东西

基本上,您可以使用systemd将您的 python 代码作为服务运行,您所要做的就是编写一个<your-app-name>.service文件,如下所示

[Unit]
Description=Some kind of description

[Service]
Type=simple
ExecStart=<path to your bin with args if needed>
Run Code Online (Sandbox Code Playgroud)

然后,将其保存在/etc/systemd/system/. 要检查一切是否正常,请运行

sudo systemctl start <your-app-name>
Run Code Online (Sandbox Code Playgroud)

进而

sudo systemctl status <your-app-name>
Run Code Online (Sandbox Code Playgroud)

最后运行

sudo systemctl enable <your-app-name>
Run Code Online (Sandbox Code Playgroud)

该服务将在每次系统启动时执行。