如何让脚本一直在linux下运行?

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

我刚刚使用init.dtesting了一个工作脚本,但不知道如何从故障中恢复? 有一个cronjob检查一个PID的存在?

我也想检查完整性。 也就是说,我想确保脚本不会被其他进程意外修改。 我听说过检查一个CRC32的脚本对一个已知的值,但不知道如何得到正在执行的文件上的任何一种md5。

这是一个超级简单的Python脚本btw(一个文件,〜20lines)。 我不确定这是否真的改变了一切。

Solutions Collecting From Web of "如何让脚本一直在linux下运行?"

Ghost博客平台安装说明 [许可证:CC-BY-3.0]有一节介绍了如何使用supervisord来部署一个nodejs脚本(运行博客),以便在失败和系统重启时重启。

主管( http://supervisord.org/ )流行的Linux发行版(如Fedora,Debian和Ubuntu)为Supervisor提供了一个软件包:一个过程控制系统,允许您在启动时运行Ghost,而无需使用init脚本。 与初始化脚本不同,Supervisor可以在Linux发行版和版本之间移植。

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

Debian / Ubuntu:apt-get install supervisor

Fedora:yum安装主管

大多数其他发行版本:easy_install主管

确保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启动Ghost

停止幽灵:supervisorctl停止幽灵

好的,所以如果你的脚本叫做myscript.py ,它属于用户蛇,并住在/home/snake

那么这个命令应该是python /home/snake/myscript.py目录应该是你想要运行的地方(我们假设这是/home/snake ), 用户应该被适当的设置(我们假设你想以用户的身份运行),自动保持不变,日志文件应该重命名。

环境设置脚本所需的任何ENV变量。 通常情况下,除非您正在使用它们来控制脚本的各个方面,否则不需要任何操作。

  1. 像上面那样安装supervisord,但是不要为ghost设置任何东西
  2. 相反,创建/etc/supervisor/conf.d/myscript如下:
  3. supervisorctl启动myscript

/etc/supervisor/conf.d/myscript

 [program:myscript] command = python /home/snake/myscript.py directory = /home/snake user = snake autostart = true autorestart = true stdout_logfile = /var/log/supervisor/myscript.log stderr_logfile = /var/log/supervisor/myscript_err.log 

应该正在运行,并且即使重新启动也会重新启动。

关于你的安全问题,这是有问题的。 如果您认为攻击者具有对包含脚本的文件系统的读/写访问权限,则还可以更改安全哈希。 公钥签名更好一些,因为攻击者不知道如何改变签名,因为他缺少私钥。 但是,攻击者再一次可能会简单地重写测试签名的代码并绕过它,或者替换脚本来验证运行脚本,以便始终运行其他命令。