답변:
하나의 명령으로 다른 사용자로 스크립트를 실행하려면 다음을 실행하십시오.
/bin/su -c "/path/to/backup_db.sh /tmp/test" - postgres
Breaking it down:
/bin/su : switch user
-c "/path/to..." : command to run
- : option to su, make it a login session (source profile for the user)
postgres : user to become
나는 항상 이와 같은 스크립트에서 전체 경로를 사용하는 것이 좋습니다. su를 할 때 항상 올바른 디렉토리에 있다고 보장 할 수는 없습니다 (아는 사람이 당신의 homedir을 변경했을 수도 있습니다). 나는 또한 편집증이기 때문에 항상 su (/ bin / su)의 전체 경로를 사용합니다. 누군가가 경로를 편집하여 손상된 su 버전을 사용하게 할 수 있습니다.
-
(또는 --login
)를 함께 사용하면 --command, -c
실제로 로그인 세션을 시작하지는 않습니다. 왜냐하면 -c
항상 비 로그인 쉘을 강제 하기 때문 입니다.
- postgress
을 위해 명령 끝에가 나타납니다. 매뉴얼 페이지에서 :When - is used, it must be specified before any username. For portability it is recommended to use it as last option, before any username. The other forms (-l and --login) do not have this restriction.
실행할 대상 사용자가 nologin shelll을 정의한 경우 -s 옵션을 사용하여 쉘을 지정할 수 있습니다.
/bin/su -s /bin/bash -c '/path/to/your/script' testuser
다음 질문을 참조하십시오. nologin 쉘을 가진 사용자로 스크립트를 실행 하십시오.
이를 일정에 따라 자동화하려면 사용자의 crontab에 넣을 수 있습니다. Cron 작업은 전체 환경을 얻지 못하지만 스크립트 환경에 필요한 모든 env 변수를 넣는 것이 좋습니다.
사용자의 crontab을 편집하려면
sudo crontab -u postgres -e
이 글은 유익한 정보 여야합니다- 쉘 스크립트의 setuid
" "인수 순서로 su 를 실행 - username
하면 사용자에게 동일한 환경을 제공하는 로그인 쉘이 작성됩니다. 일반적으로 다른 로그인에서 홈 환경으로 스크립트를 빠르게 실행하는 데 사용됩니다.
다음을 사용할 수도 있습니다.
sudo -u postgres script_run_as_postgres.sh