LINUX.ORG.RU

Содержимое скрипта?

Так же попробуй запустить в режиме вывода исполняемых команд (sh -x /path/to/script.sh или заменить #!/bin/sh на #!/bin/sh -x в начале скрипта).

anonymous
()

права правильные на скрипт?

ipwww ★★
()
Ответ на: комментарий от anonymous

Содержимое скрипта:

#!/sbin/sh
python /home/user/pf/pf.py

Права на /home/user/pf/pf.py

-rwxr-xr-x   1 user  nms         1448 Nov 29 16:33 pf.py

Права на каталог /home/user/pf

drwxr-xr-x   2 user  nms           96 Nov 28 11:15 pf

> sh -x /etc/init.d/pf
  python /home/user/pf/pf.py
': [Errno 2] No such file or directory/pf/pf.py
kernel32ddl
() автор топика
Ответ на: комментарий от kernel32ddl

Содержимое /home/user/pf/pf.py

#!/usr/bin/python
import socket
import sys
import thread

def main(setup, error):
    #sys.stderr = file(error, 'a')
    for settings in parse(setup):
        thread.start_new_thread(server, settings)
    lock = thread.allocate_lock()
    lock.acquire()
    lock.acquire()

def parse(setup):
    settings = list()
    for line in file(setup):
        parts = line.split()
        settings.append((parts[0], int(parts[1]), int(parts[2])))
    return settings

def server(*settings):
    try:
        dock_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        dock_socket.bind(('', settings[2]))
        dock_socket.listen(5)
        while True:
            client_socket = dock_socket.accept()[0]
            server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
            server_socket.connect((settings[0], settings[1]))
            thread.start_new_thread(forward, (client_socket, server_socket))
            thread.start_new_thread(forward, (server_socket, client_socket))
    finally:
        thread.start_new_thread(server, settings)

def forward(source, destination):
    string = ' '
    while string:
        string = source.recv(1024)
        if string:
            destination.sendall(string)
        else:
            source.shutdown(socket.SHUT_RD)
            destination.shutdown(socket.SHUT_WR)

if __name__ == '__main__':
    main('proxy.ini', 'error.log')

kernel32ddl
() автор топика
Ответ на: комментарий от kernel32ddl
#!/sbin/sh
python /home/user/pf/pf.py

путь до пайтона пропиши

outsider ★★
()
Ответ на: комментарий от kernel32ddl

Исправил:

main('proxy.ini', 'error.log')
на
main(os.path.dirname(sys.argv[0])+'/proxy.ini', os.path.dirname(sys.argv[0])+'/error.log')

Скрипт стал запускаться при указании полного пути из шела python /home/user/pf/pf.py Однако через /etc/init.d так и не хотел, помогло удаление пустой строки в конце файла /etc/init.d/pf

Теперь такой вопрос. В некоторых скриптах в папке /etc/init.d есть возможность запускать и останавливать скрипт. Хочу для своего скрипта сделать аналогичную возможность:

case "$1" in
'start')
        python /home/user/pf/pf.py
	;;

'stop')
	????????????????????????????
	;;

*)
	echo "Usage: $0 { start | stop }"
	exit 1
	;;

esac
exit 0 
Что нужно написать в 'stop' чтобы можно было скрипт останавливать? Возможно ли это?

kernel32ddl
() автор топика
Ответ на: комментарий от kernel32ddl

Что нужно написать в 'stop'

pkill /home/user/pf/pf.py

либо посылать скрипту сигнал, но тот его должен слушать

bcormorant
()
Ответ на: комментарий от kernel32ddl

kernel32ddl> #!/sbin/sh
python /home/user/pf/pf.py

надо было:

#!/sbin/sh
case "$1" in
 'start')
    cd /home/user/pf/
   ./pf.py
   # save PID for future kill
   echo $! > /var/run/pf.pid
...

sdio ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.