私はいつもします
sleep 4h; command
4時間後にコマンドを実行します。ただし、そのコマンドがSudo
を必要とする場合、機能しません。
Sudo
コマンドを実行しているときにsleep
権限を与えることはできますか?
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を使用してパスワードを要求せずに実行を許可する方法
コマンドによっては、これによりセキュリティ上の欠陥が生じる可能性があることに注意してください。
プロセスを1回だけ実行したい場合(たとえば、4時間ごとではなく)、atd
を使用できます
/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で次の設定を使用して(rootとして)cronを使用することもできます。
0 */4 * * * sh -c $'/path/to/command'
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
もう1つの方法は、Sudo -s
(ディレクトリを変更しない)またはSudo -i
(現在のディレクトリをルートホームディレクトリに変更する)でSudoインタラクティブセッションを開始し、コマンドを入力することです(Sudoなし)。