예를 들어 커널 업데이트가 가능할 때 재부팅을 예약하기 위해 cron 작업을 설정했지만 다음을 사용합니다.Enode API
curl -s https://api.linode.com/v4/linode/kernels/linode/latest-64bit | grep "Latest.*$(uname -r)" > /dev/null
if [ $? -eq 1 ]
then sudo init 6
fi
자세한 변경 사항은 grep 명령을 참조하세요.
내 uname -r
출력 4.14.12-x86_64-linode92
도 비교됩니다.Enode API
curl -s https://api.linode.com/v4/linode/kernels/linode/latest-64bit | grep "Latest 64 bit *$(uname -r)" > /dev/null
if [ $? -eq 1 ] ; then
systemctl 네트워크 다시 시작
답변1
여기에는 두 가지 문제가 있습니다.
- cURL의 보안을 절대적으로 신뢰하지 않는 한 일반 사용자가 아닌 루트로 실행해야 합니다. 이렇게 하면 사용을 제거할 수 있어
sudo
디버깅이 더 쉬워집니다(그리고 다른 변경 없이 작동할 수도 있습니다). - 일반적으로 이
init
명령을 사용하여 재부팅을 실행하는 것은 잘못된 형식입니다.reboot
거의 모든 Linux 및 기타 UNIX 시스템에서 작동하는 범용 옵션이며shutdown -r now
일반적으로 Linux에서 선호되는 방법입니다.systemctl reboot
Ubuntu 16.04는 systemd를 초기화 시스템으로 사용하므로 시도해 볼 수도 있습니다 .
이 두 가지 문제를 해결했다면 Linode API와 표현식이 grep
함께 작동하는 것에 대해서만 걱정하면 됩니다.
if
또한 이것은 실제로 질문은 아니지만 대부분의 경우 POSIX 쉘 스크립트의 일반적인 명령문 형식은 다음과 같습니다.
if [ <condition ] ; then
<do something>
fi
아니다:
if [ <conditon> ]
then <do something>
fi
대부분의 최신 쉘에서는 then
실제로 전혀 필요하지 않으며 단지 상황을 더 좋게 만들기 위해 존재하지만 이를 필요로 하는 일부 쉘이 있기 때문에 일반적으로 그대로 둡니다. 이것은 프로그램이 실행되는 방식에 전혀 영향을 미치지 않으며, 쉘 스크립트를 사용하는 대부분의 사람들이 사용하는 스타일 규칙일 뿐입니다(따라서 두 번째 형식을 사용할 때 이상한 모습을 볼 수 있으며, 거의 항상 예제 코드에서 볼 수 있습니다. 먼저 참조) 형태).