CRONTAB、パス変数を設定する場合[閉じる]

CRONTAB、パス変数を設定する場合[閉じる]

2つのbashスクリプトがあり、実行すると両方が機能します。

ただし、で実行しようとすると、あるcronスクリプト(Scipt 2)は機能しますが、別のスクリプト(Script 1)は機能しません。

動作しないスクリプト(スクリプト1)で使用される&コマンドの変数を設定することで問題の範囲を絞り込みましたPATHfinddate

もともと(スクリプト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コマンドを追加せずに実行されるように見えます。再起動後も。何が起こったのか本当にわからない。テストを続行することはできませんので、今質問に答えます。

関連情報