깨끗한 로그인 셸을 사용하여 스크립트를 실행하는 방법

깨끗한 로그인 셸을 사용하여 스크립트를 실행하는 방법

SSH를 통해 원격 시스템 Linux RH6(서버에서 키 가져오기)에 직접 연결하고 있는데 Java 서비스를 다시 시작하기 위해 매개변수가 포함된 셸 스크립트를 실행할 때 이상한 ulimit 문제가 발생합니다.

  • 수동으로 실행하면 ./script.sh stop;./catalina.sh start열린 파일 수가 시스템 파일에 정의된 대로 정상(1024)이 아닙니다 limits.conf.
  • 설정한 주간 작업을 실행할 때 cron(16,384)에서 올바른 값을 얻습니다.limits.conf
  • 이 작업을 수행 /bin/su - user한 다음 다시 시작해
    도 올바른 값을 갖게 됩니다.

어떻게든 내 시스템 값을 가져오고 bash 스크립트 내에 실제 로그인 셸을 갖고 서비스를 수동으로 다시 시작해야 하는 경우 올바른 수의 열린 파일을 갖도록 스크립트를 수정하는 솔루션이 필요합니다.

현재 셸의 엄격한 제한:

ulimit -Ha
open files                      (-n) 4096

글로벌:

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

문제: cron 작업을 실행할 때 현재 셸에서 스크립트를 실행하면 열려 있는 파일 수가 16384개입니다! /script.sh stop; ./script.sh start4096이 있어요. 문제는 스크립트를 수동으로 실행할 때 어떻게 16384를 얻느냐는 것입니다.

추신 편집 bashrc및 도움 bash_profile없이 ulimit -n <number>.

답변1

루트만 현재 하드 제한을 늘릴 수 있습니다. 아마도 이 사용자의 기본 제한은 /etc/security/limits.conf16384이지만 초기화 파일의 일부는 이 제한을 4096으로 설정합니다.

가능하다면 이 초기화 파일을 변경하여 소프트 제한만 설정하세요. 모든 사용자는 언제든지 어느 방향으로든 소프트 제한을 변경할 수 있으며, 유일한 제한은 하드 제한보다 높을 수 없다는 것입니다. ulimit -a 4096으로 대체됩니다 ulimit -Sa 4096.

어쨌든, 당신이 하는 일은 의심스럽습니다. 서비스를 실행하는 사용자로서 셸을 실행해서는 안 되며, 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(또는 stop​​등 restart) 간단히 실행할 수 있습니다. 사용 가능( sudo service catalina start등 잠깐만요). 아시다시피, 다른 환경에서 프로세스를 시작/중지하면 오류가 발생하기 쉽습니다. 모든 것을 init 스크립트에 넣으면 프로세스를 일관되고 깔끔하게 시작/중지하는 데 도움이 됩니다(그리고 올바르게 기록합니다).

편집: 그리고 init 스크립트를 사용하지 않거나 sudo사용하지 않는 경우 동일한 스크립트를 작성하고(init 스크립트를 생성하는 것처럼) 해당 $HOME/bin스크립트 내부에 저장합니다. 환경(제한, 환경 변수, 등) 필요에 따라 cron, Shell, 원격 SSH, Puppet 등에서 호출합니다. 나중에 이를 서비스로 구성하려는 경우(일반적으로 그렇습니다) 작업은 이미 완료된 것입니다.

관련 정보