4

rc.localを介して開始されるPythonデーモンプロセスがあります。この同じスクリプトは、同じ権限で、私が持っている他のいくつかのUbuntuボックスにインストールされます。これらのインストールでは問題なく実行されます。つまり、ボックスを再起動した後、デーモンプロセスが実行されています。

ただし、この特定のインストールでは、ログインしてプロセスの存在を確認するまでに、デーモンプロセスが実行されていません。システム間のrc.localファイルは同一です(または少なくとも十分に近い):

localaccount@sosms:~$ cat /etc/rc.local
#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.

python /var/www/myDaemon/Main.py > /var/log/somelog.txt

exit 0

権限は次のとおりです。

localaccount@sosms:~$ ls -la /etc/rc.local
-rwxr-xr-x 1 localaccount localaccount 370 Jun  3 11:04 rc.local

このテストrc.localを使用して、rc.localプロセスが実行されているかどうかをテストしました。

localaccount@sosms:/var/log/sosmsd$ cat /etc/rc.local
#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.

echo "test" > /home/localaccount/test1
/usr/bin/python /var/www/sosms/sosmsd/Main.py > /var/log/sosmsd/log/log
echo "test" > /home/localaccount/test2

exit 0
localaccount@sosms:/var/log/sosmsd$

また、ボックスを再起動すると、最初のテストファイル(test1)のみが作成されます。Python行が何らかの問題を引き起こしていることを意味していると思いますが、/ var / log / sosmsd / log/logに出力がありません。

localaccount@sosms:~$ ls
test1

アップデート:

次に、larsksのアドバイスに従い、Pythonスクリプトの起動でこのエラーが発生していると判断しました。

mysql_exceptions.OperationalError: (2002, "Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)")

これは、MySQLが初期化される前にrc.localが実行されていることを意味しますか?ここからどこへ行くの?

4

5 に答える 5

7

見逃したと答えた他の人の1つは、起動時に実行されるrc、initなどのスクリプトにあります。PATH変数は初期化される場合とされない場合があります(保証はありません)。つまり、単に「pythonsomescript.py」を実行する代わりに/ usr / bin/pythonが常に機能するとは限りません。initスクリプトとrcスクリプトのすべてに常に絶対パスを使用します。

はい、mysqldが開始される前にrc.localが実行される可能性があります。代わりに、これをinit.dスクリプトとして設定し、ヘッダーでinsservスタイルのコメントを使用して、必要な依存関係を通知する必要があります。http://manpages.ubuntu.com/manpages/lucid/man8/insserv.8.html

于 2012-06-11T17:08:52.097 に答える
3

Pythonの例外(および他のほとんどのエラーメッセージ)はに移動しstderrますが、リダイレクトするだけですstdout。次のようにサービスを実行する必要があります。

python /var/www/myDaemon/Main.py > /var/log/somelog.txt 2>&1

2>&1、シェルにstderr出力をと同じ場所に送信するように指示しstdoutます。これを実行し、問題が明らかにならない場合に表示されるエラーメッセージを投稿します。

于 2012-06-04T15:26:15.107 に答える
3

/etc/init.d/mydaemon使用可能なスケルトンからデーモンのinitスクリプトを作成する必要があります。

次に、MySQLがすでに使用可能になるように、起動順序を設定できます。

これが良い出発点です。

于 2012-06-06T19:51:04.610 に答える
1

my friends. I spend several days for this error. Fortunately I got a solution.

sudo -u www -i /the/path/of/your/script

Please prefer the sudo manual~ -i [command] The -i (simulate initial login) option runs the shell specified by the password database entry of the target user as a loginshell...

U can prefer what I post here: Run script with rc.local: script works, but not at boot

Good luck!

于 2014-07-29T09:04:00.677 に答える
0

mysqlドキュメントから: C.5.2.2。[ローカル]MySQLサーバーに接続できません

エラー(2002)Ca n't connect to ...は通常、システムでMySQLサーバーが実行されていないか、サーバーに接続しようとしたときに誤ったUnixソケットファイル名またはTCP/IPポート番号を使用していることを意味します。また、使用しているTCP/IPポートがファイアウォールまたはポートブロックサービスによってブロックされていないことを確認する必要があります。

「/var/run/mysqld/mysqld.sock」ファイルは存在しますか?

mysqlサーバーはpythonデーモンプロセスと同じサーバーで実行されていますか?

mysqlログを見ましたか?

It should be located in /var/log/

Named something like:
mysql.log
mysql.err
mysqld.log
mysqld.err

$ sudo ls -l /var/log/
// when you have the name try
$ sudo tail -n 50 /var/log/LogName

One possibility is that you're out of disk space, try:

$ sudo df -h

Look at the 4th column "Avail"

Another possibility is the folder permissions, try:

$ sudo ls -l /var/lib/

You should see something like this:

drwxr-xr-x 33 mysql     mysql   4096 May 22 10:02 mysql

You most likely want the owner and group to be "mysql", if they aren't, you could try:

$ sudo chown -R mysql:mysql /var/lib/mysql

Make a note of the original settings first so you can change it back if it doesn't help. The "-R" means change ownership recursively for the sub folders and files.

The permissions should be rwxr-xr-x (755), if not you can try:

$sudo chmod 755 /var/lib/mysql

I wouldn't do that recursively, most of the files and folders should only be accessible to the mysql user, possibly the mysql group and only read/write not executable.

于 2012-06-09T22:10:14.767 に答える