質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

89.96%

【Ubuntu】Cronで自動シャットダウンできない

受付中

回答 4

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 6,586

dlrowolleh

score 118

よろしくお願いします。
PCの電源が付いている時、人間が手を加えずにLinuxのPCを時間を指定して自動でシャットダウンする方法を知りたいです。

前提・実現したいこと→LinuxのPCを時間を指定して自動でシャットダウンしたい

LinuxのPCを時間を指定して自動でシャットダウンする方法を教えてください。

試したこと

$ crontab -e

# Edit this file to introduce tasks to be run by cron.                                                                            
# 
# Each task to run has to be defined through a single line
# indicating with different fields when the task will be run
# and what command to run for the task
# 
# To define the time you can provide concrete values for
# minute (m), hour (h), day of month (dom), month (mon),
# and day of week (dow) or use '*' in these fields (for 'any').# 
# Notice that tasks will be started based on the cron's system
# daemon's notion of time and timezones.
# 
# Output of the crontab jobs (including errors) is sent through
# email to the user the crontab file belongs to (unless redirected).
# 
# For example, you can run a backup of all your user accounts
# at 5 a.m every week with:
# 0 5 * * 1 tar -zcf /var/backups/home.tgz /home/
# 
# For more information see the manual pages of crontab(5) and cron(8)
# 
# m h  dom mon dow   command

PATH=/bin:/sbin:/usr/bin:/usr/sbin
27 13 * * * shutdown -h now


これではシャットダウンできませんでした。
$ mail
では

Failed to execute operation: Interactive authentication required.
Must be root.


でした。

$ vi /etc/crontab

# /etc/crontab: system-wide crontab                                                                                             
  # Unlike any other crontab you don't have to run the `crontab'
  # command to install the new version when you edit this file
  # and files in /etc/cron.d. These files also have username fields,
  # that none of the other crontabs do.

  SHELL=/bin/sh
  PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

  # m h dom mon dow user>-command
  17 *>---* * *>--root    cd / && run-parts --report /etc/cron.hourly
  25 6>---* * *>--root>---test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )
  47 6>---* * 7>--root>---test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly )
  52 6>---1 * *>--root>---test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly )

  30 13 * * * root /sbin/shutdown -h now


でもシャットダウンできませんでした。
$ mail

No mail for (ユーザ名)

何卒よろしくお願いします

追記

$ cat /var/log/cron
cat: /var/log/cron: そのようなファイルやディレクトリはありません
と表示されました。
調べていくうちに
/etc/init.d/cron start
と書いてあり、
Ubuntu@11 決まった時間に自動で電源を切る cronでshutdown - Cotton ...

$ vi /etc/crontab 
$ /etc/init.d/cron start
[ ok ] Starting cron (via systemctl): cron.service.

やってみたのですが、
電源は切れませんでした。

$ mail
No mail for h28-hashimoto
$ cat /var/log/cron cat: /var/log/cron: そのようなファイルやディレクトリはありません
でした。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • ynakano

    2016/11/11 16:54

    後で何の話しだったか追跡しづらくなるので、余談の部分は別質問とした方がよいかと思います。

    キャンセル

  • dlrowolleh

    2016/11/11 17:01

    分かりました。別質問として投稿させていただきます。読みにくくなり失礼しました。

    キャンセル

  • dlrowolleh

    2016/11/11 17:27

    https://teratail.com/questions/54834 に投稿させていただきました。よろしくお願いします。

    キャンセル

回答 4

+5

shutdownはroot権限が必要です。
コマンドプロンプトが$になっているので、一般ユーザーで実行してもそもそもPATHが通っていないでしょうし、shutdownはroot以外実行できません。

rootのcrontabに仕込むか、sudoersで/sbin/shutdownをNOPASSWDで実行できるようにしてください。

sudoersでやる場合は次のように設定してください。

$ sudo visudo

修正(10:03) shutdownshuwdownになっていたので修正しました。恥ずかしい。。。

user ALL = NOPASSWD: /sbin/shutdown -h now


※userには自分のuseridを設定してください

その後crontab -eで次のように設定してください。

40 19 * * * /sbin/shutdown -h now


※sudoersで設定した通り、フルパス及びオプションを完全に合わせてください

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/11/14 16:51

    >user ALL = NOPASSWD: /sbin/shutdown -h now
    ※userには自分のuseridを設定してください
    について質問です。
    useridは
    $ echo $USER
    で表示されたものにする、でよろしいでしょうか?

    $ echo $USER
    h28-hashimoto
    と表示されました。
    h28-hashimoto ALL = NOPASSWD: /sbin/shutdown -h now
    とすると、文字(ALL、=、NOPASSWD:、/sbin/shutdownの部分)に色がついていないのですが、大丈夫でしょうか?

    $ id
    uid=1000(h28-hashimoto) gid=1000(h28-hashimoto) groups=1000(h28-hashimoto),4(adm),24(cdrom),27(sudo),30(dip),46(plugdev),113(lpadmin),128(sambashare)

    と表示されました。

    キャンセル

  • 2016/11/14 17:12

    > $ echo $USER
    > で表示されたものにする、でよろしいでしょうか?
    whoami コマンドで表示されてものでいいです。恐らく $USER と同じになるはずです。

    > 文字(ALL、=、NOPASSWD:、/sbin/shutdownの部分)に色がついていないのですが、大丈夫でしょうか?
    カラーリングはエディタの機能なので何の問題もありません。

    キャンセル

  • 2016/11/14 17:21

    ありがとうございます。
    whoamiと$ echo $USER
    の結果は同じでした。

    >カラーリングはエディタの機能なので何の問題もありません。
    h28-hashimoto ALL = NOPASSWD: /sbin/shutdown -h now
    だと、
    h28-hashimoto ALL = NOPASSWD: /sbin/shutdown -h now
    の部分が、白文字になりますが
    hashimoto ALL = NOPASSWD: /sbin/shutdown -h now
    だと、
    hashimoto、/sbin/shutdown が赤、
    ALL、NOPASSWD: がピンク
    =がオレンジ
    -h now が白
    になっていたので気になって質問させていただきました。
    未だ、シャットダウンができておりません...。

    キャンセル

+4

  1. croneでやるならフルパスで
  2. helpを確認すると予約が可能  -nはnowで即時

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/11/11 15:07

    ご回答いただきましてありがとうございます。
    crontab -eでシャットダウンをしようとするにはフルパスでやる必要があるのですね。
    知りませんでした。
    予約が可能、とのことですが、
    調べてみたのですが、
    http://itpro.nikkeibp.co.jp/article/COLUMN/20060227/230883/?rt=nocnt

    hh:ss 指定した時間にシステムのシャットダウン・再起動を行う
    +mins 現在より指定時間後にシステムのシャットダウン・再起動を行う。単位は分
    ことでしょうか?
    いろいろ試してみようと思っています。
    よろしければぜひ、教えてください。

    キャンセル

  • 2016/11/11 15:16

    です。

    shutdown -h now : 即時
    shutdown -h 13:00 : 直近未来の 13:00 (server time)
    shutdown -h +5 : 5分後

    となりますね。 

    Ubuntu で利用可能かはわからないので

    shutdown --help 等で端末側のヘルプを見てください。

    キャンセル

+3

40 19 * * * /sbin/shutdown -h now

で、どうでしょうか? xa051 さんが回答しているようにフルパスで指定するのが楽です。

なお crontab の場合は

PATH=/bin:/sbin:/usr/bin:/usr/sbin
40 19 * * * shutdown -h now

のように、PATH 環境変数を指定することで各コマンドをフルパスで指定しない記述も可能です。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/11/11 19:23

    また、
    $ vi /etc/crontab

    20 19 * * * root /sbin/shutdown -h now
    としてみたのですが、
    シャットダウンできませんでした。
    $ mail
    で確認すると
    No mail for (ユーザ名)
    でした。

    キャンセル

  • 2016/11/11 21:07

    /etc/crontab は crontab -e では編集できませんので、 vi /etc/crontab して下さい。

    また /etc/crontab に書いてもシャットダウンされなかったとのことですが、/var/log/cron(かな?)を確認して、コマンドが実行されたかどうかを見てみて下さい。

    キャンセル

  • 2016/11/14 17:09

    ありがとうございます
    vi /etc/crontab

    59 16 * * * root /sbin/shutdown -h now
    と設定しました。
    しかし、電源は切れませんでした。
    $ cat /var/log/cron
    cat: /var/log/cron: そのようなファイルやディレクトリはありません
    と表示されました。

    キャンセル

+2

フルパスで書けばよい。またはPATH環境変数を入れればよい。と回答はでていますが補足として

cronでは環境変数PATHは設定されていないのでフルパスで書かなければならない。
PATHとはコマンドまでのショートカットみたいなもので、普段使っているコマンドはショートカットを利用したもの
実態はwhichコマンドでわかる

例えばlsの場合

core@localhost ~ $ which ls
/usr/bin/ls


lsは/usr/bin/lsのショートカットを利用している

環境変数はprintenvコマンドで確認できる。

core@localhost ~ $ printenv
MANPATH=/usr/local/share/man:/usr/share/man
以下省略


情報が多いので手っ取り早くPATHの環境変数を見たいときはecho $PATHで見れる

core@localhost ~ $ echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/opt/bin

なので今回の回答として

  • shutdownコマンドをフルパスで記述する
  • PATHの環境変数を入れておく
    のどちらかの対処が足りていないためのエラー。
    フルパスは長いし可読性が落ちる。PATHを入れる場合、cronの書き方次第だがPATHを使用している他のcron内のシェルに影響する可能性がある。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/11/11 17:17

    ご回答いただきありがとうございます。

    >フルパスで記述する
    >PATHの環境変数を入れておく
    とのことですが、
    記述のやり方は
    $ crontab -e
    で追記で大丈夫でしょうか?

    キャンセル

  • 2016/11/11 18:03

    cronの設定方法は2種類あるみたいです。私は/etc/crontabを直接いじることが多いですが、どちらを選ぶかは構築者の好みやコンプライアンス。環境によるところが大きいのではないでしょうか
    なので
    $ crontab -e
    "でも"大丈夫ということになり、crontabを直接"いじっても"大丈夫となります。

    さらっと↓のサイトをみて
    http://blog.mizoshiri.com/archives/215
    crontab -eは「絶対に」使ってはいけないのブログ↓をみてはいかがでしょうか
    http://d.hatena.ne.jp/ozuma/20120711/1342014448

    過程(やり方)が違うだけで目的は同じですけどね。

    キャンセル

  • 2016/11/11 19:30

    コメントいただきありがとうございます。
    >過程(やり方)が違うだけで目的は同じですけどね。
    何故か
    $ vi /etc/crontab

    $ crontab -e
    でメールが来たり来なかったりします…。
    原因は何が考えられるでしょうか…。
    度々すみません。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 89.96%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる