CRON에서와 마찬가지로 작업 스케줄러의 기본 셸을 /bin/bash로 변경합니다.

CRON에서와 마찬가지로 작업 스케줄러의 기본 셸을 /bin/bash로 변경합니다.

최근 2>&1 >>에 전환했습니다&>>

가질 수 있는 방법이 있나요?존재하다/bin/bash를 쉘로 사용하시나요? 기본적으로 /bin/sh를 사용하며 매뉴얼 페이지에는 다른 사용법에 대한 지침이 없습니다. 에서도 사용할 수 있습니다 crontab.SHELL=/bin/bash

이것이 나에게 가져오는 주요 질문은 다음과 같습니다.

echo "do-smth.sh &>> logfile" | at now + 8 hours

내 로그 파일에 stdout 및 stderr을 추가하는 대신 완전히 손실되었으며 이메일도 받지 못했습니다.

예기치 않은 리디렉션으로 인해 이 해결 방법이 작동하지 않습니다.

echo "bash <<< \"do-smth.sh &>> logfile\"" | at now + 8 hours

저는 Linux, Ubuntu 11.10 버전을 사용하고 있습니다. 이는 중요하지 않습니다.

답변1

문제는 명령이 작성된 방식이 herestring 리디렉션을 처리하려고 시도하고 ( 대신 shUbuntu에 연결됨 ) 연산자가 없다는 것입니다 . 당신은 아마 이것을 원할 것입니다 :dashbash<<<

echo 'bash -c "do-smth.sh &>>logfile"' | at now + 8 hours

답변2

기록상으로 이것은 제가 유스 케이스에서 경험한 것입니다. 방법에 주목하세요진지하게피할 수 없는 작은따옴표 또는 큰따옴표 이스케이프 때문에 난독화되었습니다.

      pidof -x pngcrush || at now <<< 'time nice bash -c '\''
(for f in $(find orderlog/ -mtime -1 -name \*.png); 
do convert -trim +repage -colors 64 -depth 6 -verbose $f $f.tmp; 
ls -lFa $f*; 
touch -r $f $f.tmp && mv -f $f.tmp $f; 
done;  
time find orderlog/ -mtime -3 -name \*.png -execdir  pngcrush -bit_depth 8 -d ~/tmp -oldtimestamp {} + ; 
mv -fv ~/tmp/*.png orderlog/; 
timeout 1h time find orderlog/ -mtime -2  \( -name \*.png -o -name \*.gif \) -execdir  optipng -keep -preserve -o6 -v  {} + ; 
rm -vf orderlog/*.png.{bak,tmp} ) &> orderlog/imgshrink.log'\'' ' 

가독성을 높이려면 여기에 줄바꿈을 추가하세요.

스크립트 안에 있기 때문에 여기에서 문서로 변환해야 할 정도로 발전했습니다.존재하다(비)파싱을 깨는 것을 두려워하지 않는 한 읽기세게 때리다.

답변3

#!/bin/bashcron이 실행하는 스크립트 상단에서 이 작업을 수행하면 어떨까요? 사용하려는 스크립트가 포함된 디렉터리를 생성하면 해당 디렉터리를 소스 제어 하에 두어 하드 드라이브에 대한 액세스 권한을 상실한 경우 복구하기가 더 쉬워집니다. puppet, Chef 또는 Ansible을 사용하여 이러한 스크립트를 설치하고 crontab에 한 줄 항목만 추가하여 실행할 수도 있습니다.

관련 정보