쉘 스크립트를 다른 사용자로 실행하는 좋은 방법은 무엇입니까? 데비안 에칭을 사용하고 있는데 가장 할 사용자를 알고 있습니다.
수동으로 수행했다면 다음과 같이하십시오.
su postgres
./backup_db.sh /tmp/test
exit
프로세스를 자동화하고 싶기 때문에 backup_db.sh를 postgres로 실행하는 방법이 필요합니다 (환경 상속 등).
감사!
답변
하나의 명령으로 다른 사용자로 스크립트를 실행하려면 다음을 실행하십시오.
/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 버전을 사용하게 할 수 있습니다.
답변
실행할 대상 사용자가 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
하면 사용자에게 동일한 환경을 제공하는 로그인 쉘이 작성됩니다. 일반적으로 다른 로그인에서 홈 환경으로 스크립트를 빠르게 실행하는 데 사용됩니다.
답변
su 맨 페이지를 시도하십시오.
su -c script_run_as_postgres.sh-postgres
대체로, sudo를 사용하여 암호없이 postcoms로 해당 코만을 실행할 수 있습니다. 그래도 / etc / sudoers에 약간의 설정이 필요합니다.
답변
다른 사람들이 게시 한 “su -c …”방법은 좋은 방법입니다. 자동화를 위해 스크립트를 실행할 사용자의 crontab에 스크립트를 추가 할 수 있습니다.
답변
사용자에게 이미 sudo에 대한 항목이 있고 수퍼 유저의 비밀번호를 모르는 경우 다음을 시도해보십시오. /data/my-db/pgsql/9.6/data에서 초기화 된 postgres를 다시 시작합니다.
sudo su - postgres -c "/usr/pgsql-9.6/bin/pg_ctl -D /data/my-db/pgsql/9.6/data -l /var/log/pgsql.log restart"