프로그램 이름에서 파생된 파일 이름으로 cron 출력 보내기

프로그램 이름에서 파생된 파일 이름으로 cron 출력 보내기

다음을 테스트했지만 운이 없었습니다. 다른 아이디어가 있나요?

#cron test, I would like to generate a stderr logfile name based on $0, but $0 value is "/bin/bash"
#why do I want this? Because some program names are quite long, and for standardization
04 10 * * * ~/bin/cron-test >> /tmp/blah 2>>~/.cronlogs/$(basename $0)  # $0 is "/bin/bash"
05 10 * * * ~/bin/cron-test >> /tmp/blah 2>>~/.cronlogs/$(basename $1)  # $1 is empty?
06 10 * * * ~/bin/cron-test >> /tmp/blah 2>>~/.cronlogs/$(basename $2)  # $2 is empty?

답변1

출력을 특정 위치로 보내는 래퍼 스크립트를 작성할 수 있습니다.

$ cat logwrap.sh
#!/bin/bash
logname=$(basename -- "$1").log
exec "$@" 2>> "~/.cronlogs/$logname"

이제 logwrap.sh id some command실행은 some command출력을 로 보내 /work/logs/some.log므로 출력은 다음으로 보내집니다 /work/logs/cron-test.log.

04 10 * * * /path/to/logwrap.sh ~/bin/cron-test 

관련 정보