在登录时以 root 身份运行脚本(没有 sudoer 用户,shell 会话)

Ant*_*hez 9 root sudo scripts login

很像/etc/profileand~/.profile但由 root 运行而不是用户正在登录。/etc/rc.local启动后运行,但我需要在登录前运行脚本。用户不是sudoer。

谢谢!

Mou*_*inX 2

步骤 1. 使用任何编辑器使用绑定命令创建脚本。例如:

sudo emacs bind_user_directories.sh
Run Code Online (Sandbox Code Playgroud)

内容:

#!/bin/bash

#NOTE: this file would be placed in /usr/local/sbin/ folder as bind_user_directories.sh
#alternatively it could be placed in /etc/init.d/ ... (I guess)

### BEGIN INIT INFO
# Provides:          bind_user_directories
# Required-Start:    
# Required-Stop:     
# Should-Start:      $named
# Default-Start:     0 2 3 4 5 6 (I guess...)
# Default-Stop:      1
# Short-Description: mount --bind for a user
# Description:       runs mount --bind command for certain pre-defined directories for a specific user
### END INIT INFO

# What is this?
DESC="bind_user_directories"

# See how we were called.
case "$1" in

    start)
        log_progress_msg "bind directories for user..."
        sudo mount --bind /source/path /target/path
        log_progress_msg "done: bind directories for user"
        ;;

    stop)
        log_progress_msg "umount --bind directories for user..."
        sudo umount /target/path
        log_progress_msg "done: unbind directories for user"
        ;;

    restart)
        $0 stop
        sleep 1
        $0 start
        ;;

    *)
        #log_success_msg "Usage: bind_user_directories {start|stop|restart}"
        log_success_msg "Usage: service bind_user_directories <start|stop|restart>"
        exit 1
        ;;
esac

exit 0
Run Code Online (Sandbox Code Playgroud)

步骤2.保存bind_user_directories.sh并使其可执行:

chmod a+x bind_user_directories.sh
Run Code Online (Sandbox Code Playgroud)

步骤 3. 将其链接到合适的位置,例如 /usr/local/sbin:

sudo ln -s bind_user_directories.sh /usr/local/sbin/bind_user_directories.sh
Run Code Online (Sandbox Code Playgroud)

步骤 4. 创建 upstart 脚本:

sudo emacs /etc/init/bind_user_directories.conf
Run Code Online (Sandbox Code Playgroud)

内容:

description "runs mount --bind command for certain pre-defined directories for a specific user"

start on filesystem and net-device-up IFACE!=lo

stop on runlevel [!023456]
console output
respawn
respawn limit 10 5

exec /usr/local/sbin/bind_user_directories.sh start
Run Code Online (Sandbox Code Playgroud)

如果这对您有用,请告诉我。您可以在登录后检查系统日志中的消息。(我还没有测试过,之前也从未实现过类似的事情。)如果您改进了解决方案,请在这里分享您的最终解决方案。谢谢。


use*_*687 0

在登录前以 root 身份运行脚本

  1. 你可以从Upstart开始写这篇文章。

  2. 您可以将脚本调用添加到现有的kdm/gdm/etc 启动脚本中

示例:主题:常见问题解答:自动启动/自动运行、定期运行