cronがユーザーのホームディレクトリに変更しようとしているのはなぜですか。これを防ぐ方法は何ですか?

cronがユーザーのホームディレクトリに変更しようとしているのはなぜですか。これを防ぐ方法は何ですか?

Centos 7でcronjob用の新しいシステムアカウントを作成し、それにcronjobを設定しました。

しかし、私のcronjobはエラーで実行されません。

(CRON) ERROR chdir failed (/home/sysagent): No such file or directory

現在のsysagentアカウントのcrontabは次のとおりです。

15 16 * * * HOME="/tmp" && cd path/to/project_folder && ./src/mainroutine.sh | ts "[\%Y-\%m-\%d \%H:\%M:\%S]" >> /var/log/automation/sysagent.log

調査後、HOME変数を追加し、プロジェクトフォルダ(シェルスクリプトのフルパスがあったフォルダ)にcd'dを追加しましたが、役に立ちませんでした。 cronjobがホームディレクトリを忘れさせる方法は?なぜそれを探していますか?

ベストアンサー1

ドキュメントが間違っているか間違っていると仮定すると、ソースコードは次のように説明します。

% rpm -qa | grep cron
cronie-1.4.11-17.el7.x86_64
cronie-anacron-1.4.11-17.el7.x86_64
crontabs-1.11-6.20121102git.el7.noarch

... RPMのURLが破損しているため、いくつかのaltagoobingleduckがここにあります...

% git clone https://github.com/cronie-crond/cronie && cd cronie
% fgrep -rl 'chdir failed' .
./src/security.c

cron_change_user_permanently...したがって、エラーは、コード内の他のさまざまな場所から呼び出された呼び出しの1つの場所にのみ表示されます。

% grep cron_change_user_permanently **/*.c
src/do_command.c:               if (cron_change_user_permanently(e->pwd, env_get("HOME", jobenv)) < 0)
src/do_command.c:               if (cron_change_user_permanently(e->pwd, env_get("HOME", jobenv)) < 0)
src/popen.c:            if (cron_change_user_permanently(pw, env_get("HOME", jobenv)) != 0)
src/security.c:int cron_change_user_permanently(struct passwd *pw, char *homedir) {

...それで、すべての場合において、HOME環境変数はchdirユーザーの場所を決定するために使用されるように見え、そのchdirディレクトリには常に1つあります。したがって、そのHOMEディレクトリが存在するかHOME正しく設定されていることを確認する必要があります。今後 cron_change_user_permanently呼び出されます(これはcronジョブのシェルコードが表示される前に発生する可能性があります)。 (またはcronie他のタスクを実行するためのサルパッチですが、これはおそらく非常に悪い考えでしょう。)

おすすめ記事