Если я правильно понял вашу проблему и вас не волнуют риски безопасности, вы можете установить sudo, добавить «www -data» (www -data — это пользователь по умолчанию, используемый nginx/apache )в файл sudoers со всеми разрешениями и без пароля, и использовать его для выполнения команды от имени другого пользователя.
Можно сделать так:
Установить судо:
apt-get install sudo
Затем добавить пользователя в конфиг:
nano /etc/sudoers
Добавьте это в последнюю строку:
www-data ALL=(ALL) NOPASSWD: ALL
И, наконец, вы можете отредактировать свой php для выполнения команды с помощью sudo:
shell_exec('sudo -u testuser /var/www/html/copy.sh');
@Редактировать
Мне удалось заставить его работать на моем сервере. Просто следуйте этим шагам, и это должно сработать и для вас.
Попробуйте заменить код PHP на этот:
<?php
echo shell_exec('/bin/sh /var/www/html/copy.sh'); #this will display the result in your browser
echo "<pre>";
echo file_get_contents("ltylog.txt");
echo "<pre>";
?>
Затем убедитесь, что данные www -имеют доступ к файлу copy.sh:
Вы можете либо дать ему 777 chmod, как этот:
chmod 777 /var/www/html/copy.sh
или вы можете сделать так, чтобы файл принадлежал пользователю www -data (, используемому apache):
chown www-data:www-data /var/www/html/copy.sh
но если вы решите использовать второй вариант, убедитесь, что данные www -все еще могут выполнить файл, применив chmod следующим образом:
chmod 755 /var/www/html/copy.sh
Сделать файл исполняемым:
chmod +x /var/www/html/copy.sh
измените код copy.sh на этот:
rsync -rzv -e 'ssh -p 199' test.txt testuser@192.168.1.79:/home/testuser/txt
ssh testuser@192.168.1.79 -p 199 /bin/sh /home/testuser/lty.sh > ltylog.txt 2>&1
Наконец, убедитесь, что у пользователя testuser есть доступ к следующим файлам:
Если вас не волнует безопасность, вы можете просто ввести это в консоли удаленного сервера
chmod 777 -R /home/
Или вы можете проверить каждый файл вручную, чтобы убедиться, что разрешения установлены правильно.
Похоже, что crond
успешно запущен :проблема может быть связана с тем, что идет после crond. Или это может быть вызвано запуском чего-то crond
.
Обратите внимание, что sshd
уже запущен и сетевые параметры уже установлены, поэтому вы сможете войти в систему с помощью SSH.
Если это не сработает, ядро может зависнуть. Для устранения неполадок прервите автоматическую загрузку в меню GRUB и добавьте параметр загрузки (, например.single
)для загрузки системы в минимальное состояние («однопользовательский режим» ), исключая такие службы, как crond
.
После этого, возможно, сначала проверьте /var/log/messages
, на случай, если есть проблема, из-за которой сообщения журнала записываются, но не отображаются.
Классически сценарии запуска -up в /etc/rc3.d
будут выполняться в алфавитно-цифровом порядке, и сравнение ваших загрузочных сообщений на снимке экрана с содержимым /etc/rc3.d
на моей виртуальной машине RHEL выглядит так, как будто порядок совпадает... поэтому запустите ls /etc/rc3.d
и посмотрите, какие сценарии идут после S90crond
в вашей установке, если вам нужно знать, какие будут следующие шаги в процессе запуска -.