コマンドは端末では機能しますが、crontabでは機能しません。

コマンドは端末では機能しますが、crontabでは機能しません。

いくつかのバックアップ設定をテストしています。毎分crontabを実行するように設定しました。バックアップをアップロードするmachine2にディスクがマウントされています。
フォルダの内容を/home/user/important圧縮important.tar.gzし、tar.gzファイルをmachine2の/mnt/backup2フォルダに移動しました。

クローンタブ項目:

* * * * * tar -czvf /home/user/important/important.tar.gz /home/user/important && 
rsync -vzhe ssh /home/user/important/*.tar* machine2:/mnt/backup2

crontabでは実行されません。

端末で同じコマンドを実行します。それはうまくいきます:

/home/user/important/
/home/user/important/a.txt
/home/user/important/test.txt
/home/user/important/this.txt
/home/user/important/is.txt
/home/user/important/important.tar.gz
/home/user/important/important.txt
/home/user/important/test1/
important.tar.gz

sent 9.85K bytes  received 35 bytes  19.76K bytes/sec
total size is 9.75K  speedup is 0.99

ファイルは machine2 の /mnt/backup2 フォルダーに受け取ります。

crontabで動作しない理由の提案がありますか?私はUbuntuを実行しています。

ベストアンサー1

実際の問題が何であるかを知ることは困難ですが、試してみる方法はいくつかあります。

  • この1行のコードをスクリプトに入れ、chmod -xcrontabで使用してください。

これにより、進行中の操作(例:set -xなど)をより適切に制御できます。

  • デバッグ出力を有効にして、crontabエントリが期待どおりに機能しない原因を特定してください。
#!/bin/bash -x

またはあなたが使用している場合sh

#!/bin/sh -x

または直接使用してくださいset -x

権限やシェルのグロービングの問題かもしれないと思いますが、スクリプトで解決できない場合は、次のことを行う必要があります。

script.sh &> script.log

したがって、cronjobで実行すると、何かとそれがどのように失敗したかを明確に見ることができます。

  • アイテムがあることを確認してください。crontab

これは明らかですが、一部のユーザーは次のようにcrontab直接追加する代わりにこのファイルを使用できますcrontab

echo "job entry" | crontab -

または、「一般的な」方法ですが、テキストエディタを開き、ユーザーがジョブ/crontabエントリを手動でコピーして貼り付け/入力する必要があります。

crontab

または二重入力を防ぐ方法を好む場合:

cronadd() {
if crontab -l | grep -wq -- "$@"; then
    :
else
    (crontab -l 2>/dev/null; echo "$@") | crontab -
fi
}

次のように使用できます。

cronadd "job entry here"

重複したジョブが追加されるのを防ぐ必要があり、実際に追加されたことを確認できますがcrontab -l

おすすめ記事