cron から直接プログラムを起動できないのはなぜですか?

cron から直接プログラムを起動できないのはなぜですか?

現在、Debian wheezy を実行している Raspberry Pi を IRC サーバーとしてセットアップしています。起動時に、通常のユーザーとして ngircd と atheme の 2 つのプログラムが実行されます。

ngircdとathemeは両方とも/var/log/syslog

/usr/local/sbin/ngircd ngircd は、Atheme ( ) と同様に、実行可能ファイル ( ) 自体から起動されます/home/user/atheme/bin/atheme-services。ターミナルからユーザーとしてプログラムを手動で起動しても、問題なく動作します。

cron から ngircd (インストールされている場所を使用) を起動しようとすると、起動しません。cron/var/log/syslogジョブが実行されたと表示されますが、何も起こりません。エラー メッセージも、ngirc 関連のログもまったく表示されません。Atheme は正常に起動します。

ただし、ngird を実行するだけのスクリプトを作成し (以前使用したのと同じパスを使用)、それを cron に追加すると、正常に動作します (直接実行した場合も同様)。なぜ ngircd が cron から起動しないのでしょうか?

大きな問題ではありませんが、システムが私の希望よりも少し乱雑になります。また、2つのプログラムの動作が異なるのも奇妙です。

答え1

コメントする権限がないので、説明を求めることはできませんが、デーモンをcronではなくinitscriptまたはrc.localから実行することをお勧めします。cronは通常、何かを実行するために使用されます。ある時点で定期的に。デーモンとサービスの処理は通常、初期化システム

起動時に通常のユーザーとして何かを実行するには:

これを追加するローカル:

/bin/su -c '/path/to/your/executable args &' -s /bin/bash username >/dev/null 2>&1

答え2

Cronは、まさに次のように動作するものを実行します。

sudo - user /path/to/command

または

su user
/path/to/command

コマンドが実行されるかどうかを確認したい場合は、この方法でテストする必要があります。

ユーザcrontabを編集して

crontab -e

またはシステム全体のcrontabとして

nano /etc/crontab

または、お気に入りのエディター以外ナノ(sudo必要に応じて先頭に を追加します)。システム全体の crontab には、実行時間とコマンドの間に、コマンドを実行するユーザーを指定する追加の列があるという点で、これら 2 つの crontab の構文が異なります。実行時間を次のように設定します@reboot

@reboot user /usr/local/sbin/ngircd
@reboot user /home/user/atheme/bin/atheme-services

userユーザーの crontab を編集している場合は、その単語を削除するだけですcrontab -e

代わりに、使用しているシステムに応じて、System V の initscripts または systemd のサービス制御ファイルを使用することもできます。

関連情報