在Ubuntu上启动时启动python脚本

时间:2015-11-27 10:42:22

标签: python linux python-2.7

我是python的新手,对Linux有基本的基础知识。

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

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

我最初发现了这个:running a python script with cron

我试图在crontab中添加它:

@reboot python /path/to/script.py &

还有这个:

@reboot /path/to/script.py &

但它似乎不起作用。

我也看到过:How to make a python script run like a service or daemon in 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))

这是crontab:

@reboot /home/administrateur/scuMonitor/main.py &

更新2

嗯,实际上它正在使用cron设置重启,但是,我的脚本没有把他的日志放在我预期的地方(我不知道路径在Linux上如何工作)。

感谢大家的所有答案!

2 个答案:

答案 0 :(得分:4)

我建议你和我写的here

一样

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

[Unit]
Description=Some kind of description

[Service]
Type=simple
ExecStart=<path to your bin with args if needed>

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

sudo systemctl start <your-app-name>

然后

sudo systemctl status <your-app-name>

最后运行

sudo systemctl enable <your-app-name>

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

答案 1 :(得分:3)

取自Run Python script at startup in Ubuntu。 您可以通过将其添加到/ etc / init目录来在Ubuntu上启动服务。

将它放在/ etc / init

<强> mystartupscript.conf

 <head>
    <script src="js/angular.min.js"></script>
      <script>
        MyPanel=angular.module('MyPanel',[]);
        MyPanel.controller('MyController', function($scope,$http){
            $http.get('feed/data.json').success(function(response){
                $scope.myData = response;
            });
        });
      </script>
    </head>
<body ng-app="MyPanel" ng-controller="myController">
    <select ui-jq="chosen" id="storeId" class="form-control m-b" >
       <option value="">Choose</option>
       <option ng:repeat="data in myData">{{myData.id}} - {{myData.name}}</option>
    </select>
</body>

据我所知,让它检查你想要它检查的唯一方法是在代码/守护进程中实现一个循环。