我遇到了一个shell脚本,它打算在Redhat 6服务器上每隔30分钟在cron上运行一次.shell脚本基本上只是一个运行python脚本的命令.
服务器上的本机版本python是2.6.6,但是这个特定脚本所需的python版本是python 2.7+.我可以使用"scl"命令在命令行上轻松运行它(此示例包含用于显示版本更改的python -V命令):
$ python -V
Python 2.6.6
$ scl enable python27 bash
$ python -V
Python 2.7.3
Run Code Online (Sandbox Code Playgroud)
此时我可以在命令行上运行python 2.7.3脚本没问题.
这是障碍.
当您发出scl enable python27 bash命令时,它会启动一个新的bash shell会话,该会话(再次)适用于交互式命令行工作.但是当在shell脚本中执行此操作时,只要它运行bash命令,脚本就会因新会话而退出.
这是失败的shell脚本:
#!/bin/bash
cd /var/www/python/scripts/
scl enable python27 bash
python runAllUpserts.py >/dev/null 2>&1
Run Code Online (Sandbox Code Playgroud)
它只是在它到达第4行时就会停止,因为"bash"将它从脚本中弹出并进入一个新的bash shell.所以它永远不会看到我需要它运行的实际python命令.
另外,如果每30分钟运行一次,这将每次添加一个新的bash,这是另一个问题.
由于几个原因,我不愿意立即将服务器上的本机python版本更新为2.7.3.Redhat yum repos还没有python 2.7.3,手动安装将在yum更新系统之外.根据我的理解,yum本身运行在python 2.6.x上.
这是我找到使用scl的方法的地方
我正在准备我的 Laravel 5.5 生产环境以在弹性负载均衡器 (ELB) 后面的多个 AWS EC2 实例上运行。所有共享数据,如图像、css、js 都存储在 S3 上,日志流式传输到 CloudWatch,数据库在 RDS 上。会话和缓存已配置为使用数据库。
一切都很好,除了我看到会话表用 user_agent "ELB-HealthChecker/2.0" 填满了数千个 ELB 健康检查。Laravel/PHP 显然将每个健康检查视为一个新用户并生成一个新会话,每个实例每 30 秒一个。这可能会很快失控,并且不可持续。
所以我的问题是...... Laravel 中是否有一种方法可以忽略或拒绝来自特定 user_agents 的请求,以便他们不启动会话?我可以编写一个 shell 脚本来定期删除记录,但这似乎是不必要的黑客攻击。