
現在、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 のサービス制御ファイルを使用することもできます。