SCPは手動でのみCRONジョブで動作しません


0

リモートサーバー(bServer)にスクリプトがあり、それは中央サーバーにSSHで接続し(cServerと呼びましょう)、さらに他の2つのサーバー(server13 / server14)にSSH接続するスクリプトを起動します。これらの各サーバーでスクリプトが実行され、ファイルが生成されます。

DSA SSHキーをcServerからserver13 / 14にセットアップしています。次に、cServerはserver13 / 14から生成されたファイルをプルし、bServerはcServerからそれらをプルします。

これは手動で実行すると完全に機能します。

ただし、bServerでジョブをスケジュールすると、server14 cronからのファイルはcServerにプルされません。

さらに興味深いの、server13へのssh or scpコマンドが同じスクリプトに存在する場合、server13からのファイルがcServerからbServerに転送さないことです。

私は、別のスクリプトでそれらを持っている場合は、server13のファイルがバックBSERVERの罰金になりますが、server14のためのファイルのみをされ生産され、バックcServerに全く転送されません。

server13とserver14の両方が同じビルドのSunOSを実行しています。

同様の問題に対するさまざまな解決策を読みましたが、解決策は見つかりませんでした。

これを解決する方法についてのアイデアはありますか?

回答:


1

cronを介してジョブを実行する場合、環境を保持していません。cronスクリプトを所有するユーザーとしてリモートサーバーに既にログインしている場合は、診断のために、代わりにatコマンドを使用して同じスクリプトを実行してみてください。

my_scriptという実行可能スクリプトにコマンドを配置した場合、次のコマンド

 at -f my_script 0936.00

9時間36分でコマンドmy_scriptを実行します。それがうまくいけば、cronで環境の重要なコンポーネントが欠落していることがわかります。


1

おそらく問題はによって使用される環境変数にありますcron。「env> out.txt」を実行cronshell、結果を比較します。

このソリューションをご覧くださいhttps://stackoverflow.com/questions/2229825/where-can-i-set-environment-variables-that-c​​rontab-will-use

source /etc/profileスクリプトの開始時に追加を試みることができます。また、スクリプトを実行しようとすることもできます#!/bin/bash -l


そうです、私のenv_cron.outは20行以上のenv.outと比較して4行だけでした。env.outをコピーし(各変数の先頭に 'export'をスタック)、必須の#!/ bin / bashを使用してファイルの名前をset_env.shに変更しました。私はこれをcron経由で開始されたスクリプトから実行しました。また、スクリプトの前にcron内で実行しました...どちらも機能しませんでした。
カーディケーキ

提案された解決策の答えの1つは、.bash_profileファイルを開始することについて語っています...しかし、私はこれらの1つを持っていません。
カーディケーキ

PS。crontabに変数を含めることはできません。
カーディケーキ

1

提案されたソリューションはどれも機能しませんでした。

これを修正するには、2つの個別のcronジョブが必要でした。server14からserver13にファイルをプルしてからbServerに戻すもの。2番目のcronジョブ(同じジョブで2番目のスクリプトとして実行した場合は機能しません)は、server13からファイルをプルします。

非常に奇妙な。残念ながら、もっとエレガントなソリューションは見つかりませんでした。

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