CRONTAB, 경로 변수를 설정하는 경우 [닫기]

CRONTAB, 경로 변수를 설정하는 경우 [닫기]

두 개의 bash 스크립트가 있고 실행할 때 둘 다 작동합니다.

그러나 에서 실행하려고 하면 cron한 스크립트(Scipt 2)는 작동하지만 다른 스크립트(Script 1)는 작동하지 않습니다.

작동하지 않는 스크립트(스크립트 1)에서 사용되는 & 명령에 대한 변수를 설정하는 것으로 문제의 범위를 좁혔습니다 PATH.finddate

원래 (스크립트 2)에서 작동하던 다른 스크립트에도 & 명령이 cron있기 때문에 약간 혼란스럽습니다 .finddate

왜 그럴까요?

Linux 배포판: Ubuntu 서버

스크립트 1(경로 설정 필요):

#!/bin/bash
#Delete Cam Folders Older Than 7 Days
PATH=/usr/bin:/bin <- MUST ADD THIS TO WORK PROPERLY IN CRON
file=$(find /cams -type d -mtime +5 | tr '\n' ' ')

if test -z "$file"
then
    echo "$(date "+%b %d %Y %T") : No directories older than 7 days"
else
    echo "$(date "+%b %d %Y %T") : Deleting Directies ${file}"
 #       find /cams -type d -mtime +7 -exec rm -rf {} +
fi

스크립트 2:

#!/bin/bash
file_date=$(date '+%A_%b-%d-%Y')
#mkdir /cams/$file_date

# record_hq.sh
# Record ip cam in segments
# Start of Day to Create Directory
# This will print the current date and time in a format appropriate for storage
STARTTIME=$(date '+%I%M%p')

## IP Camera Names ##
# Creating date stamps for each of the five cameras
CAM1D=/CAM01_$STARTTIME
#CAM2D=CAM2D_$STARTTIME
#CAM3D=CAM3D_$STARTTIME
#CAM4D=CAM4D_$STARTTIME
#CAM5D=CAM5D_$STARTTIME

## Network and Local Storage Locations  ##
HQDIR="/cams/"

## Record Time per File ##
HQLENGTH="3600" # (Runtime expressed in seconds)

## Record Settings ##
#
# -v 0    // Log level = 0
# -i      // Input url
# -vcodec // Set the video codec. This is an alias for "-codec:v".
# -an     // Disable audio recording
# -t      // Stop writing the output after its duration reaches duration
#

echo "$(date "+%b %d %Y %T") : (Hourly Recording) Started recording file                 ${CAM1D}.mkv"
if ffmpeg -v 24 -rtsp_transport tcp -i "rtsp://admin:[email protected]:554/h264Preview_01_main" -vcodec copy -an -t $HQLENGTH $HQDIR$file_date$CAM1D.mkv ; then
    echo "$(date "+%b %d %Y %T") : (Hourly Recording) Stoped recording file 
else
    echo "$(date "+%b %d %Y %T") : (Hourly Recording) Recording Script Failed"

답변1

Cron은 .bashrc 경로를 사용하지 않습니다. 일반 실행에서는 .bashrc 경로를 사용합니다. 이것이 PATH 변수가 필요한 이유입니다.

또한 PATH 변수가 다르게 보입니다.

다음과 같은 시스템 전체 cron 파일을 살펴보십시오.

This has the username field, as used by /etc/crontab.
# /etc/crontab: system-wide crontab
# Unlike any other crontab you don't have to run the `crontab'
# command to install the new version when you edit this file.
# This file also has a username field, that none of the other crontabs 
do.

SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

# m h dom mon dow user   command
42 6 * * *   root    run-parts --report /etc/cron.daily
47 6 * * 7   root    run-parts --report /etc/cron.weekly
52 6 1 * *   root    run-parts --report /etc/cron.monthly
01 01 * * 1-5 root python /path/to/file.py

답변2

이제 두 스크립트 모두 PATH 명령을 추가하지 않고 실행되는 것으로 나타납니다. 다시 시작한 후에도. 무슨 일이 일어났는지 정말 모르겠습니다. 테스트를 계속할 수도 없으므로 지금 질문에 답변하겠습니다.

관련 정보