web-dev-qa-db-ja.com

時間の経過後にSudoを必要とするコマンドを実行

私はいつもします

sleep 4h; command

4時間後にコマンドを実行します。ただし、そのコマンドがSudoを必要とする場合、機能しません。

Sudoコマンドを実行しているときにsleep権限を与えることはできますか?

30
Guerlando OCs

Sudoを使用して、コマンドを実行するルートシェルを開始します。

Sudo bash -c 'sleep 4h; command'

ルートシェルで実行されるすべてのコマンドは、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アクセスなしでコマンドの実行を許可するには、以下を参照してください。 sudoを使用してパスワードを要求せずに実行を許可する方法
コマンドによっては、これによりセキュリティ上の欠陥が生じる可能性があることに注意してください。

46
dessert

プロセスを1回だけ実行したい場合(たとえば、4時間ごとではなく)、atdを使用できます

  1. Atdが実行されていることを確認します(ubuntuでは/etc/init.d/atd status以上の場合systemctl status atd
  2. 端末でrootとして、次のようにコマンドを実行します。

    # at now + 4 hours
    warning: commands will be executed using /bin/sh
    at> command
    at> CTRL-D
    
  3. 4時間ごとに実行したい場合は、crontabで次の設定を使用して(rootとして)cronを使用することもできます。

    0 */4 * * * sh -c $'/path/to/command'
    
21
Ama Aje My Fren

1つの方法は、シェルスクリプトが現在のディレクトリにある場合、Sudo権限を持つシェルスクリプトを介して実行する(そして、シェルスクリプトを開始するときにパスワードを与える)ことです。

Sudo ./delayer 4h

ここで、delayerはコンテンツを含むシェルスクリプトにすることができます

#!/bin/bash
sleep "$1"
command

それを実行可能にする

chmod +x delayer

必要に応じて、PATHのディレクトリにコピーまたは移動します。


パラメータを入力して遅延するコマンド[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
"$@"

デモの例(デモ目的のための短い遅延、5秒)、

$ ./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
15
sudodus

もう1つの方法は、Sudo -s(ディレクトリを変更しない)またはSudo -i(現在のディレクトリをルートホームディレクトリに変更する)でSudoインタラクティブセッションを開始し、コマンドを入力することです(Sudoなし)。

2
Ludwik