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

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

新規登録して質問してみよう
ただいま回答率
85.50%
bash

bash(Bourne-again-Shell)は sh(Bourne Shell)のインプリメンテーションに様々な機能が追加されたシェルです。LinuxやMac OS XではBashはデフォルトで導入されています。

cron

cronは、Unix系OS上でデーモンプロセスとして動作する、スクリプトの自動実行が可能なジョブスケジューラです。

OS

OS(オペレーティングシステム)は、システムソフトウェアの一種であり、一般的に、ハードウェアを直接的に管理・操作する最も中心的な機能を有するソフトウェアがオペレーティングシステムとして呼ばれます。

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

Ubuntu

Ubuntuは、Debian GNU/Linuxを基盤としたフリーのオペレーティングシステムです。

Q&A

4回答

16212閲覧

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

dlrowolleh

総合スコア120

bash

bash(Bourne-again-Shell)は sh(Bourne Shell)のインプリメンテーションに様々な機能が追加されたシェルです。LinuxやMac OS XではBashはデフォルトで導入されています。

cron

cronは、Unix系OS上でデーモンプロセスとして動作する、スクリプトの自動実行が可能なジョブスケジューラです。

OS

OS(オペレーティングシステム)は、システムソフトウェアの一種であり、一般的に、ハードウェアを直接的に管理・操作する最も中心的な機能を有するソフトウェアがオペレーティングシステムとして呼ばれます。

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

Ubuntu

Ubuntuは、Debian GNU/Linuxを基盤としたフリーのオペレーティングシステムです。

0グッド

0クリップ

投稿2016/11/10 11:25

編集2022/01/12 10:55

よろしくお願いします。
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: そのようなファイルやディレクトリはありません
でした。

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ynakano

2016/11/11 07:54

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

2016/11/11 08:01

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

回答4

0

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/11 00:42

編集2016/11/11 01:04
moonphase

総合スコア6621

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

dlrowolleh

2016/11/11 08:34

ご回答いただきありがとうございます。 >$ sudo visudo 知りませんでした。 勉強になります。 >shutdownはroot権限が必要です。 コマンドプロンプトが$になっているので、一般ユーザーで実行してもそもそもPATHが通っていないでしょうし、shutdownはroot以外実行できません。 $ which shutdown と実行した際、 /sbin/shutdown と表示されました。 また、 $ which reboot で /sbin/reboot と出ました。 $ reboot で再起動します。(sudoつけてない、パスワード聞かれない)
moonphase

2016/11/11 09:40

未確認で申し訳ないですが、恐らくはsudoers関連で既にお使いの環境で本来rootしか実行できないものも実行できるように設定されていると思います。 お使いのidがwheelグループに属しているとか、/etc/sudoers.d/配下で何か定義されているとか。 もしくは他の仕組みなのか。。。 お使いのUbuntuはServerですか?Desktopでしょうか?
dlrowolleh

2016/11/11 10:26

コメントいただきありがとうございます。 >UbuntuはServerですか?Desktopでしょうか? Desktop環境です。 何度も何度もすみません。
dlrowolleh

2016/11/14 07: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) と表示されました。
moonphase

2016/11/14 08:12

> $ echo $USER > で表示されたものにする、でよろしいでしょうか? whoami コマンドで表示されてものでいいです。恐らく $USER と同じになるはずです。 > 文字(ALL、=、NOPASSWD:、/sbin/shutdownの部分)に色がついていないのですが、大丈夫でしょうか? カラーリングはエディタの機能なので何の問題もありません。
dlrowolleh

2016/11/14 08: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 が白 になっていたので気になって質問させていただきました。 未だ、シャットダウンができておりません...。
guest

0

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

投稿2016/11/10 11:31

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

dlrowolleh

2016/11/11 06:07

ご回答いただきましてありがとうございます。 crontab -eでシャットダウンをしようとするにはフルパスでやる必要があるのですね。 知りませんでした。 予約が可能、とのことですが、 調べてみたのですが、 http://itpro.nikkeibp.co.jp/article/COLUMN/20060227/230883/?rt=nocnt の hh:ss 指定した時間にシステムのシャットダウン・再起動を行う +mins 現在より指定時間後にシステムのシャットダウン・再起動を行う。単位は分 ことでしょうか? いろいろ試してみようと思っています。 よろしければぜひ、教えてください。
退会済みユーザー

退会済みユーザー

2016/11/11 06:16

です。 shutdown -h now : 即時 shutdown -h 13:00 : 直近未来の 13:00 (server time) shutdown -h +5 : 5分後 となりますね。  Ubuntu で利用可能かはわからないので shutdown --help 等で端末側のヘルプを見てください。
guest

0

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

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

なお crontab の場合は

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

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

投稿2016/11/10 11:44

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

dlrowolleh

2016/11/11 06:15

ご回答いただきましてありがとうございます。 フルパスで実行する crontab -eで 01 15 * * * /sbin/shutdown -h now と指定してみたところ、 Failed to execute operation: Interactive authentication required. Must be root. とエラーメールが来ました。 また、 >PATH=/bin:/sbin:/usr/bin:/usr/sbin 40 19 * * * shutdown -h now のように、PATH 環境変数を指定することで各コマンドをフルパスで指定しない記述も可能です。 とのことですが、crontab -e で編集しているファイル内に追記というやり方で良いでしょうか?
退会済みユーザー

退会済みユーザー

2016/11/11 07:33

おっと、moonphase さんのコメント通り、管理者権限が必要なのでエラーになってしまったようですね。簡単に設定するのなら /etc/crontab ファイルに 40 19 * * * root /sbin/shutdown -h now を追記しましょう。
dlrowolleh

2016/11/11 10:14

度々すみません $ crontab -e で 05 19 * * * root /sbin/shutdown -h now としてみたところ $ mail で確認すると /bin/sh: 1: root: not found となっていました。
dlrowolleh

2016/11/11 10:23

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

退会済みユーザー

2016/11/11 12:07

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

2016/11/14 08:09

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

0

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

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

例えばlsの場合

bash

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

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

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

bash

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

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

bash

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

なので今回の回答として

  • shutdownコマンドをフルパスで記述する
  • PATHの環境変数を入れておく

のどちらかの対処が足りていないためのエラー。
フルパスは長いし可読性が落ちる。PATHを入れる場合、cronの書き方次第だがPATHを使用している他のcron内のシェルに影響する可能性がある。

投稿2016/11/11 00:34

mosapride

総合スコア1480

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

dlrowolleh

2016/11/11 08:17

ご回答いただきありがとうございます。 >フルパスで記述する >PATHの環境変数を入れておく とのことですが、 記述のやり方は $ crontab -e で追記で大丈夫でしょうか?
mosapride

2016/11/11 09:03

cronの設定方法は2種類あるみたいです。私は/etc/crontabを直接いじることが多いですが、どちらを選ぶかは構築者の好みやコンプライアンス。環境によるところが大きいのではないでしょうか なので $ crontab -e "でも"大丈夫ということになり、crontabを直接"いじっても"大丈夫となります。 さらっと↓のサイトをみて http://blog.mizoshiri.com/archives/215 crontab -eは「絶対に」使ってはいけないのブログ↓をみてはいかがでしょうか http://d.hatena.ne.jp/ozuma/20120711/1342014448 過程(やり方)が違うだけで目的は同じですけどね。
dlrowolleh

2016/11/11 10:30

コメントいただきありがとうございます。 >過程(やり方)が違うだけで目的は同じですけどね。 何故か $ vi /etc/crontab と $ crontab -e でメールが来たり来なかったりします…。 原因は何が考えられるでしょうか…。 度々すみません。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問