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)
该服务将在每次系统启动时执行。