web-dev-qa-db-ja.com

rtcwake cronが機能しない

私は毎晩コンピューターをスリープ状態にし、翌朝再び起動させるつもりです。 rtcwakeが私の目的にかなうことがわかりました。ただし、crontabに配置しても何も起こりません。以下は、「root」ユーザーのcrontabエントリです

0 1 * * * rtcwake -m disk -s 25200

「Sudo crontab -e」を使用して追加しました。 syslogはコマンドを実行したことを示しますが、コンピューターはスリープしません。ターミナルでコマンドを直接実行すると、コンピューターは期待どおりにすぐにスリープ状態になります。したがって、ACPIに問題はないと思います。

誰にも手がかりがありますか? Ubuntu 14.04を使用しています

1
mand

さて、解決策を見つけたと思います。 rtcwakeの前にSudoを追加すると、問題が解決します。

ただし、次の質問があります。コマンドを実行するためにルートのcrontabにSudoが必要なのはなぜですか。すでにルートの下で実行されていませんか?

2
mand

これについていくつか調査を行いましたが、Sudoを使用せずにテーブル内でrtcwakeを使用して「Sudo crontab -e」を実行すると、エラーメッセージが表示されます。

/home/leo/autojob: line 4: rtcwake: command not found

「Sudo crontab -e」はルートアカウントで実行されますが、正しいコマンドパスが見つからないようです。 crontabなどの前にPATHを配置するという他の投稿がいくつかあります。rtudoのコマンドの前にSudoを配置する限り、コマンドを再度見つけることができるようです。

# m h  dom mon dow   command
40 14 * * * Sudo /home/leo/autojob >> /home/leo/cron_log 2>&1

sudo crontabの上記の構成が機能するようになりました。「自動ジョブ」はrtcwakeを含むスクリプトです。

1
wyonghao

私はこれが2年遅すぎることを知っていますが、私は同じ問題を抱えていたので、将来この問題を抱えているかもしれない人に私の解決策を提供したいと思います。

毎日06:00にマシンを起動するために、rtcwakeを使用してcronjobをセットアップしました。しかし、私の問題は、cronjobが実行されても、アラームが設定されないことでした。ルートユーザーのcrontabを_Sudo crontab -e_で編集しました。

解決策は、コマンドだけでなく、crontabでrtcwakeのフルパスを使用することでした。これを行うには、最初に_which rtcwake_を使用します。これにより、コマンドのフルパスが返され(私の場合は_/usr/sbin/rtcwake_)、cronjobで使用します。

私のcronjobは次のようになりました:0 12 * * * /usr/sbin/rtcwake -m no -t $(date +\%s -d 'tomorrow 0600')

補足として、私のようにdateを使用している場合、パーセント記号をエスケープする必要があります。

0
eirik-ff