계획된 작업에서 자주 볼 수 있습니다. 예를 들어 우리 회사의 계획된 작업 예는 다음과 같습니다.
*/2 * * * * root cd /opt/xxxx/test_S1/html/xxxx/admin; php index.php task testOne >/dev/null 2>&1*/2 * * * * root cd /opt/xxxx/test_S1/html/xxxx/admin; php index.php task testTwo >/dev/null 2>&1
& 1의 경우 더 정확하게는 파일 설명자 1이어야 하며 1은 표준 출력인 stdout을 식별합니다.
2의 경우 표준 오류, stderr을 나타냅니다.
2>&1은 표준 오류를 표준 출력으로 리디렉션하는 것을 의미합니다. 여기서 표준 출력은 /dev/null로 리디렉션되었습니다. 그러면 표준 오류도 /dev/null
에 출력됩니다. /dev/null을 "블랙홀"로 생각할 수 있습니다. 이는 쓰기 전용 파일과 동일하며 여기에 기록된 모든 내용은 영원히 손실됩니다. 그리고 거기에서 내용을 읽으면 아무것도 읽히지 않습니다.
때때로 명령 끝에 &를 추가하여 프로그램이 백그라운드에서 실행되도록 할 수 있습니다.
왜 끝에 2>&1을 써야 하나요?
index.php task testOne >/dev/null 2>&1
왼쪽이 표준 출력이라는 것을 알 수 있습니다. 이제 표준 출력은 /dev/null에 직접 입력되고 2>&1 표준 오류를 다음으로 리디렉션합니다. 표준 출력이므로 프로그램에서 오류가 발생하면 왼쪽으로 흐르는 오류와 동일하며 왼쪽은 여전히 /dev/null에 입력됩니다.
중간에 쓰면 표준 출력에서 지정한 파일을 차단하는 것으로 이해할 수 있습니다.
ls 2>1을 사용하여 테스트할 수 있지만 거기에 있는 오류는 보고되지 않습니다. 2 파일이 아니지만 빈 파일 1을 출력합니다.
ls xxx 2>1 테스트, xxx 파일이 없다는 오류가 1로 출력됩니다.
ls xxx 2>&1 테스트, 파일 1이 생성되지 않습니다. , 그러나 오류는 표준 출력으로 이동합니다.
ls xxx >out.txt 2>&1. 이는 실제로 ls xxx 1>out.txt 2>&1; 리디렉션 기호>로 대체될 수 있습니다. 기본값은 1이고 오류는 출력은 out.txt로 전송됩니다.
위 내용은 리눅스 쉘에서 '2>&1'의 의미의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!