(저에게) 이상한 동작이 발생했습니다. 더 큰 스크립트를 작성했는데 잘 작동합니다. crontab 정의 작업에서 스크립트를 실행하려고 하면 다음 줄로 인해 문제가 발생합니다.
down_ubuntu14=https://cloud-images.ubuntu.com/trusty/current/
ubuntu14=trusty-server-cloudimg-amd64-disk1.img
Ubuntu14_Date_Web=$(wget -qO- $down_ubuntu14 | grep $ubuntu14 | awk '{print $8 $9}' | sed -e "s/<.*>/ /g" | cut -d">" -f2 | awk '{print $2}')
마지막 줄에서는 특정 다운로드 대상에 대한 날짜를 얻기 위해 다운로드 사이트를 제거했습니다.
soi 5076 5075 0 09:35 ? 00:00:00 wget -qO- https://cloud-images.ubuntu.com/trusty/current/
soi 5077 5075 0 09:35 ? 00:00:00 grep trusty-server-cloudimg-amd64-disk1.img
soi 5078 5075 0 09:35 ? 00:00:00 awk {print $8 $9}
soi 5079 5075 0 09:35 ? 00:00:00 sed -e s/<.*>/ /g
soi 5080 5075 0 09:35 ? 00:00:00 cut -d> -f2
soi 5081 5075 0 09:35 ? 00:00:00 awk {print $2}
파이프가 개행을 일으키거나 문자열의 각 부분을 단일 프로세스로 시작하는 것처럼 보입니다.
귀하의 답변과 조언에 진심으로 감사드립니다. 좀 더 정확한 예를 들어보려고 노력했습니다.
다음과 같은 짧은 스크립트를 설정하면:
down_ubuntu14=https://cloud-images.ubuntu.com/trusty/current/
ubuntu14=trusty-server-cloudimg-amd64-disk1.img
Ubuntu14_Date_Web=$(wget -qO- $down_ubuntu14 | grep $ubuntu14 | awk '{print $8 $9}' | sed -e "s/<.*>/ /g" | cut -d">" -f2 | awk '{print $2}')
echo $Ubuntu14_Date_Web | tee /tmp/test
echo "Just another test line" | tee -a /tmp/test
SSH 콘솔에서 실행하면 테스트 파일에 다음이 표시됩니다.
cat /tmp/test
14-Jun-2018
Just another test line
crontab에 다음 줄을 입력합니다.
20 6 * * * /home/soi/scripts/test.sh
이제 cron에 의해 스크립트가 시작되고 프로세스 목록에서 다음을 볼 수 있습니다.
soi 6508 6507 0 06:20 ? 00:00:00 /bin/sh -c /home/soi/scripts/test.sh
soi 6509 6508 0 06:20 ? 00:00:00 wget -qO- https://cloud-images.ubuntu.com/trusty/current/
soi 6510 6508 0 06:20 ? 00:00:00 grep trusty-server-cloudimg-amd64-disk1.img
soi 6511 6508 0 06:20 ? 00:00:00 awk {print $8 $9}
soi 6512 6508 0 06:20 ? 00:00:00 sed -e s/<.*>/ /g
soi 6513 6508 0 06:20 ? 00:00:00 cut -d> -f2
soi 6514 6508 0 06:20 ? 00:00:00 awk {print $2}
...그리고 로그 파일 /tmp/test에 공백 하나만 기록합니다. 로그에 다음 내용만 기록합니다.
cat /tmp/test
Just another test line
이 문제의 주된 이유를 이해하지 못합니다. 누군가가 여기에 깨달음을 가져올 수 있기를 바랍니다.
답변1
대부분의 cron 구현은 프로세스가 포함된 셸을 시작하지 않고 대신 셸을 사용하여 파이프를 구문 분석하고 두 프로세스를 별도로 실행합니다. script.sh에 명령을 추가하고 cron에서 호출하면 작동합니다.
답변2
적어도 그것은 Linux 설치에만 해당되는 것 같습니다. 나는 이 스크립트를 5개의 다른 컴퓨터와 Linux 버전에서 시험해 보았는데 어디에서나 잘 작동합니다. 그래서 우리는 상자를 다시 설치하기로 결정했습니다.
여러분의 지원과 아이디어에 진심으로 감사드립니다. 매우 감사합니다.
건배, 프랭키