web-dev-qa-db-ja.com

crontabジョブが機能しない

背景

Crontabを使用してshスクリプトを毎分実行しようとしていますが、動作していません。

問題

スクリプトを手動で実行すると、正しく実行されますが、crontabでは実行できません。

crontab -eを使用してジョブを作成しましたが、pgrep cronと入力するとPIDが返されるため、cronが実行されていることがわかります。

また、私はそれをテストしたので私の時間形式が正しいことを知っています このオンラインテスターで

コード

wallpaperSlider.sh

#!/bin/bash
feh --randomize --bg-fill /home/username/Pictures/wallpapers/*

crontabジョブ

Shell=/bin/bash

* * * * * username /home/username/.crons/wallpaperSlider.sh

研究

私はAskUbuntuで最も一般的なエラーを読んだことがありますが、私は何も経験していないと思います。

おそらくいくつかの環境変数が欠落していることを理解していますが、それを確認する方法がわかりません。

crontab -eがtmpファイルを変更/作成することも知っています。私の場合は/tmp/crontab.wCajAu/crontabです。

質問

  1. このスクリプトをcronで実行するにはどうすればよいですか?
  2. crontab -etmpフォルダー内のファイルを変更することに留意して、再起動するとすべての変更が失われますか?
2
Flame_Phoenix

Cron形式が間違っています。あなたが欲しい:

* * * * * /home/username/.crons/wallpaperSlider.sh

ユーザーのcrontabにはusernameフィールドがありません。これは、/etc/crontabなどのシステム全体のcrontabにのみ使用されます。また、デフォルトのシェルがbash(Ubuntuではdash)でなくても、スクリプト自体にShebang行(Shell=/bin/bash)があるため、#!/bin/bashは必要ありません。 Shell cronの起動に関係なく、bashによって実行されます。

ただし、cronからXサーバーと通信するアプリケーションを実行しようとしているので、おそらく他の問題もあるでしょう。その場合、使用する必要があります:

DISPLAY=":0.0"
XAUTHORITY="/home/YOURUSERNAME/.Xauthority"
XDG_RUNTIME_DIR="/run/user/1000"
* * * * * /home/username/.crons/wallpaperSlider.sh
3
terdon