如何在linux中始终保持脚本运行?

时间:2014-09-27 04:23:20

标签: python linux cron reliability

我试图一直运行一个简单的python脚本。我希望它在启动时自动启动,并能够从故障中恢复。也就是说,如果出现导致脚本停止的故障,我真的不在乎,只是希望它再次开始运行。如果整个设备重新启动,我很好。

我刚刚测试了一个工作脚本using init.d,但我不确定如何从失败中恢复过来?有一个cronjob检查是否存在pid?

我也想检查完整性。也就是说,我想确保脚本没有被其他进程意外修改。我听说过根据已知值检查脚本的CRC32,但我不确定如何在正在执行的文件上获取任何类型的md5。

这是一个超级简单的python脚本btw(一个文件,~20行)。我不确定这是否真的改变了什么。

1 个答案:

答案 0 :(得分:2)

Ghost blogging platform installation instructions [许可证:CC-BY-3.0]有一节介绍如何使用 supervisord 部署nodejs脚本(运行博客),以便在以后重新启动它失败并在系统重启。

  

主管(http://supervisord.org/)流行的Linux发行版 - 如此   作为Fedora,Debian和Ubuntu,为主管维护一个包:A   过程控制系统,允许您在启动时运行Ghost   不使用init脚本。与init脚本不同,Supervisor是   可在Linux发行版和版本之间移植。

     

根据Linux发行版的要求安装Supervisor。通常情况下,   这将是:

     

Debian / Ubuntu:apt-get install supervisor

     

Fedora:yum install supervisor

     

大多数其他发行版:easy_install supervisor

     

通过运行确保Supervisor正在运行   service supervisor start    为Ghost安装创建启动脚本。通常情况下会这样   在   /etc/supervisor/conf.d/ghost.conf   例如:

[program:ghost] 
command = node /path/to/ghost/index.js 
directory = /path/to/ghost 
user = ghost 
autostart = true 
autorestart = true 
stdout_logfile = /var/log/supervisor/ghost.log 
stderr_logfile = /var/log/supervisor/ghost_err.log 
environment = NODE_ENV="production"
  

使用Supervisor启动Ghost:supervisorctl start ghost

     

停止Ghost:supervisorctl stop ghost

好的,所以如果您的脚本被称为myscript.py并且它属于用户 snake 并且位于/home/snake

然后命令应该是python /home/snake/myscript.py目录应该是您想要运行它的地方(我们假设这是{{1} }},用户应该设置得恰当(我们假设你想以用户 snake 运行),汽车保持不变,日志文件应该被重命名。

环境设置脚本所需的任何ENV变量。通常,除非您使用它们来控制脚本的各个方面,否则您将不再需要任何内容​​。

  1. 如上所述安装supervisord,但不要为ghost设置任何内容
  2. 相反,请按以下方式创建/home/snake
  3. supervisorctl start myscript
  4. /etc/supervisor/conf.d/myscript

    /etc/supervisor/conf.d/myscript

    应该正在运行,即使重启也会重启。

    关于您的安全问题,这是有问题的。如果您假设攻击者对包含该脚本的文件系统具有读/写访问权限,则他们也可以更改安全性哈希。公钥签名稍微好一些,因为攻击者因为缺少私钥而无法知道要更改签名的内容。但是再一次,攻击者可能只是重写测试签名的代码并绕过它或者替换脚本以在验证后运行脚本以便始终运行其他命令。