편집하다
내가 하는 일은 다음과 같습니다(나의 밑바닥까지 물지 않기를 바랍니다):
restart_network.sh
내 디렉토리에 하나를 만들었습니다/root
. 내부에:
#!/bin/bash
while ! (grep -q "ttl" <<< "$(ping -c2 192.168.1.150)")
do
ifup enx207bd2248c85
done
- 내장
/etc/systemd/system/fixlan.service
:
[Unit]
Description=Fix network incase the USB-NIC does not start.
#because I want it to first try to activate the USB-NIC alone
After=networking.service
#If didn't succeed, at least wait for network before starting all
#Nextcloud services (because it's the designation of the server)
Before=snap.nextcloud.mdns-publisher.service snap.nextcloud.redis-server.service snap.nextcloud.mysql.service snap.nextcloud.renew-certs.service snap.nextcloud.apache.service snap.nextcloud.logrotate.service snap.nextcloud.nextcloud-fixer.service snap.nextcloud.php-fpm.service
[Service]
ExecStart=/root/restart_network.sh
나는 체계화된 서비스를 만들어본 적이 없고, 내가 제대로 하고 있는지도 모르겠습니다.
편집하다
헤드리스 Debian 11 서버가 있습니다. 네트워크 카드가 고장 나서 USB 네트워크 카드를 설치했습니다. 가끔(5번째 부팅마다) 네트워크 카드가 부팅되지 않는 경우가 있습니다. 로그인하고
ifup enx207bd2248c85
네트워크 카드가 IP 주소를 얻은 다음 모든 관련 서비스를 다시 시작할 수 있습니다.
따라서 아이디어는 다음과 같이 수행하는 것입니다.
if (grep -q "ttl" <<< "$(ping -q -c2 192.168.1.151)"); then
reboot now;
fi
시작 스크립트로서 무엇을 해야 할지 잘 모르겠습니다(시작 스크립트 추가). 이제 이것이 작동할 수도 있지만 시스템이 재부팅 루프에 빠질 가능성이 높습니다. 그렇다면 더 좋은 방법이 있다고 생각하시나요? 아마 그냥
if (grep -q "ttl" <<< "$(ping -q -c2 192.168.1.151)"); then
# restart all services
fi
그래서 나는 무엇을 해야할지 모르겠습니다 ...
도와주세요.
답변1
그래서 나는 run 을 사용 crontab
하고 추가했습니다 . 언급한 대로 스크립트는 다음과 같습니다.@reboot
/root/restart_network.sh
#!/bin/bash
while ! (grep -q "ttl" <<< "$(ping -c2 192.168.1.150)")
do
ifup enx207bd2248c85
systemctl restart snap.nextcloud.* #added just in case...
done