【问题标题】:Run python script from rc.local does not execute从 rc.local 运行 python 脚本不执行
【发布时间】:2016-06-05 02:59:57
【问题描述】:

我想在 ubuntu 14.04LTS 启动时运行 python 脚本。

我的rc.local文件如下:

sudo /home/hduser/morey/zookeeper-3.3.6/bin/zkServer.sh 启动

echo "test" > /home/hduser/test3

sudo /home/hduser/morey/kafka/bin/kafka-server-start.sh /home/hduser/morey/kafka/config/server.properties &

echo "test" > /home/hduser/test1

/usr/bin/python /home/hduser/morey/kafka/automate.py &

echo "test" > /home/hduser/test2

退出 0

除了我的 python 脚本之外的所有东西都可以正常工作,即使是运行 python 脚本后的 echo 语句,但 python 脚本似乎没有运行。 我的python脚本如下

import sys
from subprocess import Popen, PIPE, STDOUT

cmd = ["sudo", "./sbt", "project java-examples", "run"]
proc = Popen(cmd, shell=False, stdout=PIPE, stdin=PIPE, stderr=STDOUT)
proc.communicate(input='1\n')
proc.stdin.close()

如果单独执行,效果非常好。

我经历了以下questionslink

我做了很多研究,但找不到解决方案

编辑:echo 语句仅用于测试目的,第二个实际命令(不考虑 echo 语句)正在启动一个继续运行的服务器,甚至 python 脚本也会启动一个在无限循环上运行的侦听器,如果这是任何帮助

【问题讨论】:

  • Python 脚本会更自然地实现为 rc.local 中的/path/sbt "project java-examples" > /dev/null 2>&1。 Python 只是在那里分散注意力。

标签: python linux shell ubuntu rc


【解决方案1】:

不要在后台运行 Python 脚本,而是在前台运行它。不要退出其父脚本。最好从“rc.local”中调用另一个脚本来完成“echo”和脚本启动的所有工作。

从“rc.local”运行该脚本;不在后台(没有 &)。

您不需要“sudo”,因为“rc.local”是以 root 身份运行的。

【讨论】:

  • 我在没有 echo 语句的情况下尝试了它,并且不在后台运行脚本,但它仍然不起作用
【解决方案2】:

Python 脚本尝试启动 ./sbt。你确定如果rc.local 运行时的当前目录会怎样?规则是在系统脚本中始终使用绝对路径

【讨论】:

  • 非常感谢。不使用绝对路径是问题所在。
【解决方案3】:

如果你想在系统启动时运行 python 脚本,我使用了另一种解决方案。

1:创建像sample.sh这样的sh文件并复制粘贴以下内容

#!/bin/bash
clear


python yourscript.py

2:现在在重启时添加一个 cron 作业。如果你使用的是 linux,你可以使用如下

a:Run crontab -e(Install sudo apt-get install cron)
b:@reboot /full path to sh file > /home/path/error.log 2>&1

然后重启你的设备

【讨论】:

  • 由于编辑队列已满,我将在这里明确回答:运行此命令sudo crontab -e,然后在crontab末尾添加@reboot /full/path/to/file/sample.sh > /home/error.log 2>&1
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-15
  • 1970-01-01
相关资源
最近更新 更多