小编Vik*_*rón的帖子

从没有 tty stdin 的根脚本中以另一个用户身份运行脚本

使用 CentOs,我想以用户“培训”的身份运行脚本作为系统服务。我使用 daemontools 来监控进程,它需要一个以 root 身份运行并且没有 tty 标准的启动程序脚本。

下面我给出了我的五种不同尝试,但都失败了。

  1. #!/bin/bash
    exec >> /var/log/training_service.log 2>&1
    setuidgid training training_command
    
    Run Code Online (Sandbox Code Playgroud)

    最后一行不够好,因为对于training_command,我们需要为trqaining 用户设置环境。

  2. su - training -c 'training_command' 
    
    Run Code Online (Sandbox Code Playgroud)

    这看起来像(以不同的用户身份运行 shell 脚本)但提供 ' standard in must be tty' as su 确保 tty 存在以可能接受密码。我知道我可以通过修改 /etc/sudoers(a la https://superuser.com/questions/119376/bash-su-script-giving-an-error-standard-in-must-be-a- tty)但我不情愿并且不确定后果。

  3. sudo -u training -i bash -c 'source $HOME/.bashrc; training_command'
    
    Run Code Online (Sandbox Code Playgroud)

    同一主题的变体:' sudo: sorry, you must have a tty to run sudo'

  4. runuser - training -c 'training_command'  
    
    Run Code Online (Sandbox Code Playgroud)

    这个给runuser: cannot set …

linux su shell centos daemontools

4
推荐指数
1
解决办法
5万
查看次数

标签 统计

centos ×1

daemontools ×1

linux ×1

shell ×1

su ×1