用 Python 编写的 init.d 脚本

mjh*_*jhm 10 linux python init.d

一个问题想出了StackOverflow上询问写init.d在Python脚本。一条评论指出这些脚本应该在 shell 中编程,而不是在 Python 中。正在init.d用 Python编写脚本:

  1. 坏的。坏的。坏的。永远不要这样做。
  2. 不是推荐的做法。
  3. 好的,有警告。
  4. 传统教条。
  5. 完全没问题。

知道任何噩梦场景,或者这条规则是否是用某些系统管理员的血写的,那就太好了。

Vat*_*ine 10

我看不出它有什么问题,如果您确信 Python 解释器在 init.d 脚本运行时可用。对我而言,这表明您正在查看在多用户(或“图形控制台”)运行级别中相对较晚完成的某些事情。

但是...这意味着特定版本的 Python 解释器可能对您的启动顺序至关重要,这是您在升级时需要检查的另一件事。

我想这意味着我在说“3. 好的,有警告”。

  • +1。正是我在写的。这里唯一的“问题”是确保您符合 LSB(例如提供必要的功能)并确保您需要的 Python 解释器在运行时可用(并且没有损坏。) (4认同)
  • 如果用户选择将 /usr 放在单独的分区上,则在运行时可用可能会很复杂。在挂载 /usr 之后运行脚本很重要,因为 python 通常安装在 /usr 中。 (3认同)

mat*_*tdm 9

我会说#2,但非常接近#1——“糟糕。糟糕。糟糕。永远不要这样做。” Linux init 脚本的标准是在 LSB 中,虽然它从来没有出现并说“这些是 bourne shell 脚本”,但做了几个假设。一,以# 开头的那几行是注释,碰巧效果很好。更有问题的是,要求 init 脚本执行/lib/lsb/init-functions“在当前环境中(请参阅 shell 特殊内置命令点)”中的命令。

但更重要的是,如果你在这里做任何非常复杂的事情,你就做错了。init 脚本应该非常简单和实用。它们应该是经典意义上的脚本,而不是程序。与其用 Python 制作漂亮的东西并制作一些漂亮的东西,不如把它搞定并制作一个任何系统管理员都可以轻松掌握的简单 shell 脚本。

要记住的另一个考虑因素是systemd,这可能是也可能不是 Linux 上所有系统初始化的未来。在 systemd 下,初始化是通过简单的配置文件而不是脚本完成的,其想法是所有启动都符合几种标准设计模式,实际上您只需要选择一种即可。如果你的程序使用一些复杂的初始化,那应该在 init 脚本本身之外。