쉘 스크립트가 수동으로 실행되지만 systemd에서 시작할 때 예상대로 작동하지 않습니다.

쉘 스크립트가 수동으로 실행되지만 systemd에서 시작할 때 예상대로 작동하지 않습니다.

google-drive-ocamlfuse부팅 시 Fedora 35 Linux를 마운트 하려고 합니다 .

설치했는데 opam성공적으로 설치되었습니다 google-drive-ocamlfuse.

이것은 WiFi를 사용하여 인터넷에 연결된 노트북에 있기 때문에 부팅 시 실행할 bash 스크립트를 만들었습니다.google-drive-ocamlfuse위키에서 다음 지침을 따르세요 .:

#!/bin/bash

while true; do
  # check to see if there is a connection by pinging a Google server
  if ping -q -c 1 -W 1 8.8.8.8 >/dev/null; then
    # if connected, mount the drive and break the loop
    /home/myusername/.opam/default/bin/google-drive-ocamlfuse /home/myusername/GoogleDrive; break;
  else
    # if not connected, wait for one second and then check again
    sleep 1
  fi
done

스크립트를 에 넣었습니다 /usr/local/bin. 하지만 위키의 소개에는 에 넣으라고 나와 있습니다 /home/username/bin. 이것이 왜 어떤 식으로든 중요한지 모르겠습니다.

에서 스크립트를 실행해야 하는 /etc/systemd/systemsystemd 서비스를 만들었습니다 .mount-google-drive.service

[Unit]
Description=Run shell script to launch google-drive-ocamlfuse at startup

[Service]
User=myusername
Group=myusername
ExecStart=/usr/local/bin/mount-google-drive-ocamlfuse.sh

[Install]
WantedBy=multi-user.target

수동으로 실행 하면 $ /usr/local/bin/mount-google-drive-ocamlfuse.shGoogle Drive 폴더가 제대로 마운트됩니다. 그러나 시작 시 스크립트를 성공적으로 실행하기 위해 systemd 서비스를 얻을 수 없는 것 같습니다.

내 .I에서 실행 하고 다시 시작 하도록 ~/.bashrc파일을 수정했습니다 .export PATH=$PATH:$HOME/.opam/default/bin/google-drive-ocamlfuse$PATH$ sudo systemctl daemon-reload

/usr/local/bin/mount-google-drive-ocamlfuse.sh허가를 받으십시오 -rwxr-xr-x.

/etc/systemd/system/mount-google-drive.service허가를 받으십시오 -rwxr-xr-x.

내가 실행할 때 $ sudo systemctl status mount-google-drive.servicesystemd가 스크립트를 실행하는 것 같지만 어떤 이유로 스크립트가 실행되지 않습니다.실제로설치 ~/GoogleDrive폴더:

$ sudo systemctl status mount-google-drive.service 
○ mount-google-drive.service - Run shell script to launch google-drive-ocamlfuse at startup
     Loaded: loaded (/etc/systemd/system/mount-google-drive.service; enabled; vendor preset: disabled)
     Active: inactive (dead) since Sun 2021-12-05 22:36:19 CST; 2min 58s ago
    Process: 1360 ExecStart=/usr/local/bin/mount-google-drive-ocamlfuse.sh (code=exited, status=0/SUCCESS)
   Main PID: 1360 (code=exited, status=0/SUCCESS)
        CPU: 67ms

Dec 05 22:36:11 fedora systemd[1]: Started Run shell script to launch google-drive-ocamlfuse at startup.
Dec 05 22:36:11 fedora mount-google-drive-ocamlfuse.sh[1382]: ping: connect: Network is unreachable
Dec 05 22:36:12 fedora mount-google-drive-ocamlfuse.sh[1573]: ping: connect: Network is unreachable
Dec 05 22:36:13 fedora mount-google-drive-ocamlfuse.sh[1614]: ping: connect: Network is unreachable
Dec 05 22:36:14 fedora mount-google-drive-ocamlfuse.sh[1616]: ping: connect: Network is unreachable
Dec 05 22:36:15 fedora mount-google-drive-ocamlfuse.sh[1618]: ping: connect: Network is unreachable
Dec 05 22:36:16 fedora mount-google-drive-ocamlfuse.sh[1620]: ping: connect: Network is unreachable
Dec 05 22:36:17 fedora mount-google-drive-ocamlfuse.sh[1622]: ping: connect: Network is unreachable
Dec 05 22:36:19 localhost-live.lan systemd[1]: mount-google-drive.service: Deactivated successfully.

myusername스크립트가 실제로 실행되고 있는지 확인하기 위해 실행했고 $ su - myusername -c 'bash /usr/local/bin/mount-google-drive-ocamlfuse.sh'드라이브가 예상대로 완벽하게 마운트되었습니다.

~/GoogleDrivesystemd가 스크립트를 "성공적으로" 실행하는 것처럼 보이지만 실제로는 bash 스크립트를 수동으로 실행할 때처럼 폴더를 마운트하지 않는 이유는 무엇입니까 ?google-drive-ocamlfuse

답변1

모든 " ~"을(를) 전체 경로로 바꾸십시오. " ~"는 기능입니다 $SHELL. 예를 들어 .make verify( ) /home/user240467/GoogleDrive대신 mount가 존재하는지 확인하세요.~/GoogleDriveman mkdir/home/user240467/GoogleDrive

내 스크립트를 다운로드하고, 사용하고, 수정할 수 있습니다 net-o-matic.

이 문제를 해결하기 위해 bash 스크립트를 작성했습니다. https://github.com/waltinator/net-o-matic연결을 모니터링하고 연결이 끊어지면 사용자가 지정한 작업을 수행하여 다시 연결을 시도합니다.

관련 정보