/etc/cron.hourlyにスクリプトを入れても機能しないのはなぜですか?


16

に実行可能スクリプトを配置しました/etc/cron.hourlyが、そのスクリプトは1時間ごとに実行されるわけではなく、実際にはまったく実行されません。

ここに私が作成したスクリプト(時の音)があります:

#!/ bin / bash
mplayer〜/ Music / sfx_msg-highlight.wv&> / dev / null&
spd-say -r -50 -p 50 -t male3「今は$(date + "%l%p")です」
notify-send "それは:" "$(date +"%l%p ")now。" -i〜/ Pictures / "first tee.png" -t 5000

私のcrontabは:

DISPLAY=":0.0"
XAUTHORITY="/home/naruto/.Xauthority"
XDG_RUNTIME_DIR="/run/user/1000"

0 * * * * /home/naruto/Hour-sound.sh

一方でmplayerspd-sayコマンドが正しく実行されている、notify-sendではありません。また、エラーをファイルにリダイレクトしようとしました:

0 * * * * /home/naruto/Hour-sound.sh 2>/tmp/error

しかし、それは出力を示しませんでした。私は何を間違えていますか?


念のため、スクリプトを実行可能にしましたか?ルートが所有?ターミナルからスクリプトを実行するか、そこに簡単なスクリプトを配置するとどうなりますか?ディレクトリから毎時ジョブを実行するため/etc/crontabrun-parts行はありcronますか?
-heemayl

実行可能:はい、スクリプトの実行は/etc/cron.hourlyディレクトリから何の問題もありません。これを確認する方法がわかりませんか?スタートアップアプリケーションで確認できますか?@heemayl
ブラックブロック

1
/etc/crontabファイルには、ラインを持っていますか17 * * * * root cd / && run-parts --report /etc/cron.hourly
-heemayl


1
テキストのスクリーンショットを投稿しないでください。特に、そのテキストが透明なターミナルウィンドウに表示され、注意をそらす色が含まれている場合。
テルドン

回答:


24

おそらくあなたの質問へのコメントで見たように、のcronjobs /etc/cron.hourly(および他の同様のディレクトリ)はによって実行されrun-partsます。run-partsファイル名について少しうるさいです。デフォルトでは、ファイル名に(ASCIIのすべて)以外のものが含まれているファイルは実行されません。

  • 大文字
  • 小文字
  • 下線
  • ダッシュ(「マイナス記号」)

そのため、スクリプトのファイル名が「myscript.sh」などの場合run-parts、ドットが気に入らないため無視されます。


1-ここに私のファイルがあります:mediafire.com/view/rg8r85xb7qw26zs/cron.hourly_017.png 2- /etc/cron.hourlyのスクリプトを試してみましたか?
ブラックブロック

2
/ tmp内のファイルに「Hello」と書き込んだリッテスクリプトをテストしたところ、問題なく動作しました。念のため、スクリプト/etc/cron.hourlyは必ずしも「正時に」実行されるわけではないことを知っていますか?/etc/crontabcronjobの分の位置に17がある場合、スクリプトは00:17、01:17などに実行されます。念のため、スクリプトのアクセス許可により、ユーザーrootがそれらを実行できるようにしますか?
ヘニングコッカーベック

でも、私のスクリプトはいつでも実行されることはありません。そして、許可についてはこちらをご覧:mediafire.com/view/psnb4bflawdlyly/...
黒ブロック

たぶんそれは実際には許可の問題です。より一般的なスクリプトには、/etc/cron.d/「グループ」または「その他」に対する書き込みまたは実行の許可があってはならないことを知っています。「所有者」には実行権限が必要で、「グループ」と「その他」には読み取り権限のみが必要です。たぶんそれも当てはまりますが/etc/cron.hourly、私はそれをテストしませんでした。
ヘニングコッカーベック

[OK]をクリックして、ファイルmediafire.com/view/s2lq63u7z54ohbo/のアクセス許可を変更しました。これにより、ルートグループであるグループが読み取り専用になり、他のグループに問題が発生しますか?
ブラックブロック

5

1つの問題は、notify-sendcronからグラフィカルアプリケーション()を実行しようとしていることです。それには少し調整が必要です。あなたは、設定する必要がありXAUTHORITYそしてDISPLAYそれはあなたの実行中のXセッションに接続できるように、crontabファイル内の変数と、あなたが設定する必要がありXDG_RUNTIME_DIR、それはあなたのpulseaudioセッションに接続できるようにします。残念ながら、これらはcrontab自体で設定する必要があるため、使用できません/etc/cron.hourly。代わりに、crontab -e次の行を実行して追加します。

DISPLAY=":0.0"
XAUTHORITY="/home/YOURUSERNAME/.Xauthority"
XDG_RUNTIME_DIR="/run/user/1000"

0 * * * * /path/to/script.sh 

の値を、ターミナルからXDG_RUNTIME_DIR返されたときに返される値に変更します echo。私のシステムでは、これは次のとおりです。

$ echo $XDG_RUNTIME_DIR
/run/user/1001

おそらく同じですが、最初に確認してください。これで、スクリプトは1時間ごとに実行され、期待どおりに動作するはずです。


つまり、mediafire.com / view / ucjpvu8b41n3hue / …の意味です。これは私にはうまくいきませんでした。
ブラックブロック

問題がnotify-sendにあった場合、他のコマンドも実行されなかったのはなぜでしょうか(mplayerなど)?
ブラックブロック

@BlackBlockには複数の問題があります。i)と変数を設定する必要があり、ii)設定notify-sendする必要がXAUTHORITYありDISPLAYます。私の提案を試してみましたか?これで両方の問題が解決するはずです。他の回答で説明したように、おそらく名前付けの問題もありました。mplayerXDG_RUNTIME_DIRrun-parts
テルドン

では、なぜこれがうまくいかなかったのでしょうか?私は怒るよ!あなたの答えの最初のコメントで私の画像を参照してください
ブラックブロック

@BlackBlockいいえ!あなたは編集/etc/crontabしています、それをしないでください。これは、rootとしてではなく、ユーザーとして実行する必要があり、そのファイルはとにかく異なる形式を持ちます。答えで言ったことを実行crontab -eして、そこに行を追加します。
テルドン

3

で終わるスクリプト.sh/etc/cron.hourlyフォルダーで実行されません:

https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=308911 ピリオドが含まれる
場合、run-pars(/etc/cron.dailyなど)によって処理されるディレクトリ内のリンクまたはバイナリは実行されません彼らの名前。

スクリプトの名前を変更します

mv /etc/cron.hourly/Hour-sound.sh /etc/cron.hourly/Hour-sound

または、スクリプト呼び出しを

/etc/crontab

.shエンディングを許可します


1

拡張子付きスクリプト(abc.sh)を使用して、必要な場所を追加しないでください。(cron.hours)。

コードをabcファイルに追加して保存します(必要に応じて)(これはbashコマンドである必要があります)

使用する

sudo chmod +x abc

実行可能ファイルを作成するコマンド。

edit etc/cronrtab file

数分から数時間までの行の定義済みの数行が編集されて保存されています。

その後、正常に実行されます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.