私の仮想マシンにCentOS 7.6があります。いくつかのbashスクリプトがあり、/opt
このユーザーとしてそれを実行する必要がありますdbuser
。これらのスクリプトは出力をフォルダに書き込みます。これを使ってcrontabにcrontab -e
入れて毎分実行するようにしました。dbuser
* * * * * /opt/share/scripts/Connections
* * * * * /opt/share/scripts/Memory
* * * * * /opt/share/scripts/Regular
出力フォルダを確認すると、毎分変更されません。スクリプトを手動で実行すると、問題なく実行され、出力が正しく更新されます。
このスクリプトのすべてのディレクトリとサブディレクトリを確認しましたが、両方に完全なx
権限があります。
これは/var/log/cron
、コマンドが実行され、エラーがないことを意味します。変更するたびに
サービスも再起動します。私も次のことを試しました:crond
* * * * * /usr/bin/bash /opt/share/scripts/Connections
* * * * * /usr/bin/sh /opt/share/scripts/Connections
* * * * * dbuser /opt/share/scripts/Connections
まだ出力フォルダに更新がありません(このコマンドは手動で正しく機能します)。
最後に、root crontabにこれを追加し、エラーなしでうまく機能し、出力ファイルを更新しました。
* * * * * /usr/sbin/runuser -l dbuser -c '/opt/share/scripts/Connections'
各ユーザーのcrontabをrootに追加することはできません。私は彼らが自分のcrontabにいることを願っています。なぜこれが起こり、どのように解決できますか?
修正するdbuser
スクリプトは、ユーザーに書き込み権限がある場所に書き込みます。私はそれをテストしました。
ユーザーはデータベースユーザーなので、スクリプトにデータベースコマンドへのパスがあります。
DB2PATH=/home/$username/sqllib/bin/db2
これをcronjobが使用するパスに追加する必要がありますか?
いいえ、メールは送信しません。後で参照できるようにデータベース状態レポートを生成します。
答え1
ステートメントを通じてユーザーを定義しますsu -
。私は元のユーザースクリプトと同じ問題に遭遇しました。これは私にとって効果的でした。
* * * * * root su - <username> -c "bash <script to run>"