如何使用干净的登录 shell 运行脚本

如何使用干净的登录 shell 运行脚本

我直接通过 ssh 连接到远程计算机 Linux RH6(在服务器上导入密钥),当我执行带有重新启动 java 服务的参数的 shell 脚本时,我遇到了一个奇怪的 ulimit 问题:

  • 当我手动运行时,./script.sh stop;./catalina.sh start我发现打开文件的数量与系统文件中定义的不正常(1024)limits.conf
  • 当执行我设置的每周作业时,我从(16,384)cron获得正确的值;limits.conf
  • 当我这样做/bin/su - user然后重新启动时,我
    也有正确的值。

我需要一个解决方案来修改脚本,以某种方式获取我的系统值,并在 bash 脚本中拥有真正的登录 shell,并在需要手动重新启动服务时拥有正确数量的打开文件。

当前 shell 的硬限制:

ulimit -Ha
open files                      (-n) 4096

全球的:

cat /etc/security/limits.conf
oracle hard nofile 16384

问题:当执行 cron 作业时,当我从当前 shell 运行脚本时,打开的文件数为 16384 个!/script.sh stop; ./script.sh start我有 4096。问题是当我手动运行脚本时如何获得 16384?

ps 编辑bashrcbash_profilew​​ithulimit -n <number>没有帮助。

答案1

只有 root 才能提高当前的硬限制。据推测,该用户的默认限制为/etc/security/limits.conf16384,但初始化文件中的某些内容将该限制设置为 4096。

如果可以,请更改此初始化文件以仅设置软限制。任何用户可以随时向任一方向更改软限制,唯一的限制是它不能高于硬限制。即替换ulimit -a 4096ulimit -Sa 4096.

无论如何,你所做的事情都是狡猾的。您可能不应该以运行服务的用户身份运行 shell,您应该从您的帐户进行维护,sudo根据需要使用不同的权限运行命令。因此,要启动该服务,您不应该使用./script.sh stop;./catalina.sh start但是

sudo -u user ./script.sh stop; sudo -u user ./catalina.sh start

这不会运行可能会降低限制的初始化文件。

原则上,您的系统配置可能会根据您的登录方式,通过 PAM(/etc/pam.conf/etc/pam.d/*)设置不同的规则来设置不同的限制。然而,这将是一个奇怪的、不寻常的配置。

答案2

与其手动运行./script.sh stop;./catalina.sh start并单独使用具有相同功能的 cronjob,不如使用/etc/init.d/catalina可以配置所有限制、环境变量等的脚本;然后要启动/停止,只需运行sudo /etc/init.d/catalina start(或stoprestart等);或者,更简单(如果可用)sudo service catalina start(等等)。正如您所发现的,从不同的环境启动/停止进程有点容易出错;将所有内容放入 init 脚本中将有助于一致且干净地启动/停止进程(并正确记录)。

编辑:并且,如果您不使用sudo也不使用初始化脚本,那么只需编写相同的脚本(就像您正在创建初始化脚本一样),将其保存在您的$HOME/bin(或任何地方)中,并在该脚本内设置环境(限制、环境变量等)根据需要;从 cron、shell、远程 ssh、puppet 等调用它。稍后,如果您想将其配置为服务(通常是这种情况),那么这项工作就已经完成了。

相关内容