一般的な環境でcronjobを実行する方法は?

一般的な環境でcronjobを実行する方法は?

cronjobの実行に使用されるシェルと環境変数は、NETによって提供されたものとはまったく異なりますgnome-terminal。端末で実行するのと同じコンテキストでcronjobをどのように実行できますか?

私の現在のソリューションはcronjobを実行することですが、env DISPLAY=:0.0 gnome-terminal -e my-commandそれが許可されていないgnome端末がポップアップします。

答え1

の上部で必要な環境変数を明示的に指定したり、crontabどこかから環境を取得したりできます。

環境変数を明示的に追加するには、スクリプトの上部(ハッシュバンの後ろ)で次の行を使用できます。

FOO=bar

ファイルからインポートするには、次の行を使用してください。

. /foo/bar/baz

含める質問に対する編集内容に応じてソースを入手できる必要gpg-agentがあります。存在しない場合から始めてください。~/.gpg-agent-info$GPG_AGENT_INFOgpg-agent--write-env-file "${HOME}/.gpg-agent-info"

答え2

そうですね。プロセスは他のプロセス環境を見ることはできません。これは主に意図的に設計されています。しかし、export環境は他の目的に使用するためにきちんとパッケージされています。

あなたができることはあなたの中にある。.bashrc:

[[ $DISPLAY ]] && export > ~/.cron_bread_crumbs/gonme_env

その後、cronジョブで簡単に選択してください。

. /home/user/.cron_bread_crumbs/gnome_env

ファイルは次の行で埋められます。

declare -x ENV_VARIABLE="value"

もちろん、値は引用されます。これがまさに「きれいに包まれている」という意味です。

この値を取得してエクスポートを呼び出すことは、親declare -xcronから始まる(および切り離すことができる)すべての後続プロセスもこれらの値を継承することを意味します。

しかし、これはgnome端末が開いていると仮定し、cronが実行される前に値が更新されるため、少し厄介です。しかし、クローンの仕事に少し完全さを追加することはそれほど難しくありません。

別のオプションは、環境を名前付きパイプにダンプしながらブロックするタスクをバックグラウンドで開始し、cronタスクがそこからインポートされるようにすることです。とにかく問題は、クローン操作が変数を取得できるように、Gnome端末を介して何が起こるかを確認することです。

関連情報