Guerlando OCs Asked: 2019-02-18 23:55:20 +0800 CST2019-02-18 23:55:20 +0800 CST 2019-02-18 23:55:20 +0800 CST 一段时间后运行需要 sudo 的命令 772 我通常会 sleep 4h; command 在 4 小时后执行命令。但是,如果该命令需要sudo,它将不起作用。 sudo在我运行命令时是否可以授予权限sleep? scripts bash sudo 4 个回答 Voted Best Answer dessert 2019-02-19T00:10:35+08:002019-02-19T00:10:35+08:00 用于sudo启动运行命令的 root shell: sudo bash -c 'sleep 4h; command' 在 root shell 中运行的每个命令都以 root 权限运行,这sleep并没有什么坏处。如果您需要运行具有用户权限的命令,请使用sudo -u USERNAME COMMAND,例如: $ sudo bash -c 'sleep 4h; sudo -u dessert whoami; whoami' dessert # whoami run as user dessert root # whoami run as root 另一种方法是sudo visudo允许在没有 root 访问权限的情况下执行命令,请参阅: How to allow execution without prompting for password using sudo? 请注意,根据命令的不同,这可能会产生安全漏洞。 Ama Aje My Fren 2019-02-19T01:06:09+08:002019-02-19T01:06:09+08:00 假设您只想运行一次该过程(而不是例如每 4 小时),那么您可以使用atd 确保 atd 正在运行(在 ubuntu 中/etc/init.d/atd status还是更好systemctl status atd) 在终端以 root 身份运行您的命令,如下所示: # at now + 4 hours warning: commands will be executed using /bin/sh at> command at> CTRL-D 如果您想每 4 小时运行一次,您还可以在 crontab 中使用具有以下配置的 cron(以 root 身份) 0 */4 * * * sh -c $'/path/to/command' sudodus 2019-02-19T00:09:47+08:002019-02-19T00:09:47+08:00 一种方法是通过具有sudo权限的 shellscript 运行(并在启动 shellscript 时提供密码),如果 shellscript 在当前目录中, sudo ./delayer 4h wheredelayer可以是包含内容的 shellscript #!/bin/bash sleep "$1" command 使其可执行 chmod +x delayer PATH如果您愿意,可以将其复制或移动到目录中。 如果你想要一个更灵活的shellscript,你可以通过输入参数来选择命令[line]来延迟,你可以试试 #!/bin/bash if [ $# -lt 2 ] || [ "$(whoami)" != "root" ] then echo "Delay start of command, that needs 'sudo' Usage: sudo $0 <delay> <command line> Example: sudo $0 4h parted -ls" exit fi sleep "$1" shift "$@" 演示示例(短延迟,5s,用于演示目的), $ ./delayer Delay start of command, that needs 'sudo' Usage: sudo ./delayer <delay> <command line> Example: sudo ./delayer 4h parted -ls $ sudo ./delayer 5s parted /dev/sdc p [sudo] password for sudodus: Model: Kanguru SS3 (scsi) Disk /dev/sdc: 15,9GB Sector size (logical/physical): 512B/512B Partition Table: gpt Disk Flags: Number Start End Size File system Name Flags 2 1049kB 2097kB 1049kB primary bios_grub 3 2097kB 258MB 256MB fat32 primary boot, esp 4 258MB 2274MB 2016MB primary 5 2274MB 12,5GB 10,2GB ext2 primary 1 12,5GB 15,9GB 3394MB ntfs primary msftdata Ludwik 2019-02-19T04:06:42+08:002019-02-19T04:06:42+08:00 sudo -s另一种方法是使用(不更改目录)或(将当前目录更改为根主目录)启动 sudo 交互式会话,sudo -i然后输入您的命令(不使用 sudo)
用于
sudo
启动运行命令的 root shell:在 root shell 中运行的每个命令都以 root 权限运行,这
sleep
并没有什么坏处。如果您需要运行具有用户权限的命令,请使用sudo -u USERNAME COMMAND
,例如:另一种方法是
sudo visudo
允许在没有 root 访问权限的情况下执行命令,请参阅: How to allow execution without prompting for password using sudo?请注意,根据命令的不同,这可能会产生安全漏洞。
假设您只想运行一次该过程(而不是例如每 4 小时),那么您可以使用
atd
/etc/init.d/atd status
还是更好systemctl status atd
)在终端以 root 身份运行您的命令,如下所示:
如果您想每 4 小时运行一次,您还可以在 crontab 中使用具有以下配置的 cron(以 root 身份)
一种方法是通过具有
sudo
权限的 shellscript 运行(并在启动 shellscript 时提供密码),如果 shellscript 在当前目录中,where
delayer
可以是包含内容的 shellscript使其可执行
PATH
如果您愿意,可以将其复制或移动到目录中。如果你想要一个更灵活的shellscript,你可以通过输入参数来选择命令[line]来延迟,你可以试试
演示示例(短延迟,5s,用于演示目的),
sudo -s
另一种方法是使用(不更改目录)或(将当前目录更改为根主目录)启动 sudo 交互式会话,sudo -i
然后输入您的命令(不使用 sudo)