두 개의 bash 스크립트가 있고 실행할 때 둘 다 작동합니다.
그러나 에서 실행하려고 하면 cron
한 스크립트(Scipt 2)는 작동하지만 다른 스크립트(Script 1)는 작동하지 않습니다.
작동하지 않는 스크립트(스크립트 1)에서 사용되는 & 명령에 대한 변수를 설정하는 것으로 문제의 범위를 좁혔습니다 PATH
.find
date
원래 (스크립트 2)에서 작동하던 다른 스크립트에도 & 명령이 cron
있기 때문에 약간 혼란스럽습니다 .find
date
왜 그럴까요?
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 명령을 추가하지 않고 실행되는 것으로 나타납니다. 다시 시작한 후에도. 무슨 일이 일어났는지 정말 모르겠습니다. 테스트를 계속할 수도 없으므로 지금 질문에 답변하겠습니다.