我刚刚测试了一个可行的脚本 使用init.d,但不确定如何从故障中恢复?是否需要通过cronjob检查pid的存在?
我还想检查完整性。也就是说,我想确保脚本没有被其他进程意外修改。我听说过检查脚本的CRC32与已知值相比较,但不确定如何对正在执行的文件进行任何类型的md5检查。
顺便说一下,这是一个非常简单的Python脚本(一个文件,约20行)。我不确定这是否真的会改变什么。
Ghost博客平台安装说明 [许可证:CC-BY-3.0]中有一个部分展示了如何使用supervisord来部署一个运行博客的nodejs脚本,这样它就可以在失败和系统重启时重新启动。
Supervisor是一个进程控制系统,允许您在不使用init脚本的情况下在启动时运行Ghost。像init脚本一样,Supervisor在Linux发行版和版本之间是可移植的,包括Fedora、Debian和Ubuntu等流行的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
,目录应该是你想运行此程序的位置(我们假设这是/home/snake
),用户应设置适当(我们假设你想作为用户snake运行),自动化过程不变,日志文件应重命名。
环境设置任何脚本所需的ENV变量。通常情况下,除非您使用它们来控制脚本的某些方面,否则您不需要任何变量。
/etc/supervisor/conf.d/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
应该保持运行状态,即使重启也会重新启动。
关于您的安全问题,这是有问题的。如果您假设攻击者可以读写包含脚本的文件系统,那么他们也可以更改安全哈希值。公钥签名要好一些,因为攻击者没有私钥,不知道如何更改签名。但是,攻击者可能会简单地重写测试签名的代码并绕过它或替换脚本以在验证后运行脚本来始终运行其他命令。