/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 时会位于正确的目录中(也许有人更改了你的主目录,谁知道)。我也总是使用 su (/bin/su) 的完整路径,因为我很偏执。有人可能会编辑您的路径并导致您使用受损版本的 su。
要将您的脚本作为另一个用户作为一个命令运行,请运行:
我建议始终在这样的脚本中使用完整路径 - 你不能总是保证你在 su 时会位于正确的目录中(也许有人更改了你的主目录,谁知道)。我也总是使用 su (/bin/su) 的完整路径,因为我很偏执。有人可能会编辑您的路径并导致您使用受损版本的 su。
如果要运行的目标用户定义了 nologin shelll,则可以使用 -s 选项指定 shell:
请参阅以下问题: 以具有 nologin shell 的用户身份运行脚本
要按计划自动执行此操作,您可以将其放在用户的 crontab 中。虽然 Cron 作业不会获得完整的环境,但最好将所有需要的环境变量放在脚本本身中。
要编辑用户的 crontab:
这应该是一个信息丰富的阅读——shell脚本上的setuid
如果您使用 " " 参数序列运行su
- username
,它将为用户创建一个登录 shell,以提供与用户相同的环境。通常,用于从不同的登录名在您的家庭环境中快速执行您的脚本。试试 su 手册页:
su -c script_run_as_postgres.sh - postgres
或者,您可以使用 sudo 来允许您在没有密码的情况下以 postgres 的形式运行该命令。不过,它需要在 /etc/sudoers 中进行一些设置。
别人贴的“su -c ...”方法不错。对于自动化,您可以将脚本添加到您需要它执行的用户的 crontab 中。
您还可以使用:
如果用户已经有一个 sudo 条目并且您不知道超级用户的密码,那么您可以尝试以下操作: 这个重新启动在 /data/my-db/pgsql/9.6/data 初始化的 postgres