我是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上如何工作)。
感谢大家的所有答案!
答案 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>
据我所知,让它检查你想要它检查的唯一方法是在代码/守护进程中实现一个循环。