Linux crontab - 어떤 쉘을 사용하고 있나요?

Linux crontab - 어떤 쉘을 사용하고 있나요?

crontab에서 어떤 쉘을 사용하고 있는지 어떻게 알 수 있나요?

예를 들어 출력을 리디렉션하려는 경우 &> 또는 >&(bash 대 csh)를 사용해야 하는지 어떻게 알 수 있나요?

답변1

에서 crontab(5):

여러 환경 변수는 cron(8) 데몬에 의해 자동으로 설정됩니다. SHELL은 /bin/sh로 설정되고, LOGNAME 및 HOME은 crontab 소유자의 /etc/passwd 라인에서 설정됩니다. HOME 및 SHELL은 crontab의 설정을 통해 무시할 수 있습니다.

답변2

이는 사용 중인 버전 cron과 구성 방법에 따라 다르지만 일반적으로 yes 입니다 /bin/sh. 일반적으로 다른 항목에 대한 심볼릭 링크이지만 ls -l /bin/sh.

다음과 같은 cron 항목을 추가할 수 있습니다.

* *    * * *    ps -p $$ > /tmp/shelltest

또는 ( /etc/crontab을 통해 각 사용자의 crontab에 항목을 추가하는 대신 편집하는 경우 crontab -e):

* *    * * *    username    ps -p $$ > /tmp/shelltest

/tmp/shelltest출력에서 셸의 파일 이름을 알려줍니다 . cron출력이 메일로 전송되도록 설정 권한이 있는 경우 >/tmp/shelltest메일로 정보 가져오기를 건너뛰고 대신 파일에 넣을 수 있습니다.

다음과 같이 더 복잡합니다.

* *    * * *    ls -l /proc/`ps -p $$ | tail -n 1 | xargs | cut -f 1 -d \ `/exe > /tmp/shelltest

사용된 정확한 파일을 알려주어야 합니다. 일반적인 Debian 시스템에서는 다음과 같은 결과가 발생합니다.

lrwxrwxrwx 1 dspillett dspillett 0 Mar 14 16:17 /proc/1356/exe -> /bin/dash

이 인스턴스에서는 cron이 dash기본 셸로 사용됨을 보여줍니다.

이 명령을 분석하려면 다음을 수행하십시오.

  • ps -p $$현재 프로세스(즉 ps, 상위 프로세스)의 세부 정보를 인쇄합니다. 이 경우에는 셸이 됩니다.
  • tail -n 1ps포함된 헤더 줄을 제거하세요.
  • 파이핑 스루(Piping through)는 xargs줄의 선행 공백을 잘라내는 트릭입니다.
  • 호출은 cut이와 같이 첫 번째 필드에서 구분 기호가 공백인 필드를 가져옵니다(\와 백틱 사이에 공백을 포함하는 것이 절대적으로 중요합니다).
  • 백틱으로 묶고 외부 명령줄의 출력(프로세스 ID여야 함)을 포함하면 다음과 같이 됩니다.
  • ls -l /proc/9999/exe여기서 "9999"는 읽은 프로세스 ID이며, 이는 프로세스를 생성하는 데 사용된 파일을 나열합니다. ps'/proc' 파일 시스템에 <pid>로 식별된 프로세스의 실행 파일에 대한 /proc/<pid>/exe링크가 있기 때문입니다.
  • (동일한 작업을 수행하는 더 깔끔한 방법이 있을 수 있습니다. 이는 기억에서 입력한 것이므로 의견을 통한 제안을 환영합니다!)

관련 정보