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