启动时运行 Python 脚本

启动时运行 Python 脚本

在 Ubuntu Karmic 上运行。我需要在启动时执行以下(更新的)脚本

#!/bin/sh
# /etc/init.d/scripts
# Description: Starts Python scripts
# ————————————————–
#
### BEGIN INIT INFO
# Provides: Scripts
# Required-Start: $network $local_fs $syslog
# Required-Stop: $local_fs $syslog
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Description: Start Python scripts to provide mapping services
### END INIT INFO

case $1 in
  start)
    # echo -n ¨Starting Mapping service: ¨
/usr/local/bin/liteserv.py /home/myUN/bin/mapnik/my_osm.xml --caching --debug=False
;;
  stop)
# echo -n ¨Stoping Mapping service: ¨
/usr/local/bin/liteserv.py /home/myUN/bin/mapnik/my_osm.xml --caching --debug=False
;;
  restart)
# echo -n ¨Retarting Mapping service: ¨
/usr/local/bin/liteserv.py /home/myUN/bin/mapnik/my_osm.xml --caching --debug=False
;;
  *)
# echo ¨Usage: scripts {start|stop|restart}¨
exit 1
esac

已将其放入 /etc/init.d 中并注册

sudo update-rc.d scripts defaults

但启动时没有任何反应。我尝试查看日志,但找不到任何内容。脚本和 liteserv.py 都被标记为可执行文件。

根据安迪史密斯的回应,当我跑步时:

/etc/init.d/scripts start  

我现在让程序正确运行(纠正错误的引号后)。
但是,它仍然不会在启动时运行该程序。

答案1

这很奇怪,但除非这是 Stack Exchange 正在做的事情,否则我认为您遇到的问题是您使用的是“花式引号”而不是"".

无论您使用什么编辑器,都可能已将标准引号字符 (Unicode U+0022) 替换为风格化的左引号和右引号(U+201C 和 U+201D)。 sh不太喜欢这个。当我用“正常引号”替换这些风格化引号时,您的代码可以正常工作(有一个小例外,我没有它调用的 .py 文件)。

答案2

您可以将您的东西添加到/etc/rc.local.

否则,您可以将脚本放入/etc/init.d/chmod +x然后运行update-rc.d FOO defaults​​。

答案3

您的脚本表明它希望在运行级别 3 和 5 中启动,在运行级别 1 和 2 中停止(加上 0 和 6,它们是关闭和重新启动),并且在运行级别 4 中没有意见。Ubuntu 默认情况下启动到运行级别 2(我认为这对于 Upstart 来说仍然如此)。因此,除非您设置不同的默认运行级别,否则您的脚本将不会运行。在脚本标题中,使用

# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6

答案4

通过增加:

exec > /tmp/debug-my-script.txt 2>&1  

在脚本文件的开头,我至少能够捕获来自 Python 程序的错误消息(postgres 的身份验证错误)。因此该脚本在启动时运行(经过大量社区输入)。它只是在运行期间失败(这是一个不同的问题)。

相关内容