私は通常やる
sleep 4h; command
4時間後にコマンドを実行します。ただし、そのコマンドにが必要な場合sudo
、機能しません。
コマンドをsudo
実行しているときに許可を与えることは可能sleep
ですか?
shutdown
。特定の時間にスリープをスケジュールするためのsudoおよび適切な引数を指定したコマンド。
私は通常やる
sleep 4h; command
4時間後にコマンドを実行します。ただし、そのコマンドにが必要な場合sudo
、機能しません。
コマンドをsudo
実行しているときに許可を与えることは可能sleep
ですか?
shutdown
。特定の時間にスリープをスケジュールするためのsudoおよび適切な引数を指定したコマンド。
回答:
sudo
コマンドを実行するルートシェルを起動するために使用します。
sudo bash -c 'sleep 4h; command'
rootシェルで実行されるすべてのコマンドは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アクセスなしでコマンドの実行を許可するために使用することです。sudoを使用してパスワードを要求せずに実行を許可する方法を参照してください
。
コマンドによっては、セキュリティ上の欠陥が生じる可能性があることに注意してください。
プロセスを一度だけ(たとえば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時間ごとに実行したい場合は、cronタブで次の設定でcronを(ルートとして)使用することもできます
0 */4 * * * sh -c $'/path/to/command'
at
このジョブに適したツールです。I/ Oリダイレクトも処理し、シェルウィンドウをブロックせず、ユーザーがログアウトした後やマシンが再起動された場合でも機能するためです。
sudo bash -c 'sleep 4h && command' &
バックグラウンドでsudoを配置することは、シェルウィンドウ/タブをブロックしない簡単な方法です。出力が発生したことを思い出させるために、非同期でポップアップ表示したい場合は、簡単です。再起動後は動作しませんが、nohup
設定によっては、シェルを終了/ログアウトした後も動作し続ける場合があります。
systemctl status atd
1つの方法はsudo
、シェルスクリプトが現在のディレクトリにある場合、許可付きのシェルスクリプトを介して実行することです(シェルスクリプトの起動時にパスワードを指定します)。
sudo ./delayer 4h
ここdelayer
で、コンテンツを含むシェルスクリプトにすることができます
#!/bin/bash
sleep "$1"
command
実行可能にする
chmod +x delayer
PATH
必要に応じて、ディレクトリにコピーまたは移動します。
パラメーターを入力して遅延させるコマンド[行]を選択できる、より柔軟なシェルスクリプトが必要な場合は、試してみてください。
#!/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
/bin/sh
構文であればそれは問題ないでしょう。ただし、bash固有の機能を使用する場合は、shebangが必要です。私とスチールドライバーはどこかでそれについて議論しました。Aaand Videonauthは、適切に対応する前にコメントを削除しました。まあ