Невозможно выполнить ожидаемый сценарий через cron даже с разрешениями, установленными на 777
Я создал ожидаемый скрипт, который не будет запускаться при вызове cron. Я включил полный путь в cron при его вызове следующим образом.
* * * * * /usr/local/sbin/checkForRemoteTasks >/tmp/checkForRemoteTasks.output
Это вызывает скрипт checkForRemoteTasks и экспортирует результаты в /tmp/checkForRemoteTasks.output. Содержание скрипта следующее:
#!/usr/bin/expect -f
set timeout -1
set env(TERM) vt100
if [file exists "/usr/local/sbin/remoteTasks/restartMySQL"] {
## STOP APACHE FIRST
spawn apache2ctl stop
expect "#"
spawn service mysql restart
expect "#"
spawn rm /usr/local/sbin/remoteTasks/restartMySQL
expect "#"
spawn apache2ctl start
expect "#"
}
if [file exists "/usr/local/sbin/remoteTasks/restartApache"] {
spawn apache2ctl graceful
expect "#"
spawn rm /usr/local/sbin/remoteTasks/restartApache
expect "#"
}
У меня есть скрипт на моем тестовом сервере, который загружает файл в файл /usr/local/sbin/remoteTasks/restartMySQL. Файл содержит один символ. Сценарий ожидаемого запуска cron (на моем производственном сервере) должен проверить файл restart MySQL, и если он найдет файл, он должен запустить соответствующие команды, чтобы остановить apache, перезапустить MySQL, а затем перезапустить apache. Он работает, когда я запускаю его вручную, а не когда запускаю через cron. Любая помощь будет оценена.
Вот вывод /tmp/checkForRemoteTasks.output:
spawn apache2ctl stop
1 ответ
Являются ли какие-либо из этих команд на самом деле интерактивными? Если нет, просто используйте exec
if {[file exists "/usr/local/sbin/remoteTasks/restartMySQL"]} {
## STOP APACHE FIRST
exec apache2ctl stop
exec service mysql restart
file delete /usr/local/sbin/remoteTasks/restartMySQL
exec apache2ctl start
}
if {[file exists "/usr/local/sbin/remoteTasks/restartApache"]} {
exec apache2ctl graceful
file delete /usr/local/sbin/remoteTasks/restartApache
}
Но если вы делаете это, вы могли бы хорошо придерживаться оболочки:
#!/bin/sh
if [[ -f /usr/local/sbin/remoteTasks/restartMySQL ]]; then
## STOP APACHE FIRST
apache2ctl stop
service mysql restart
rm /usr/local/sbin/remoteTasks/restartMySQL
apache2ctl start
fi
if [[ -f /usr/local/sbin/remoteTasks/restartApache ]]; then
apache2ctl graceful
rm /usr/local/sbin/remoteTasks/restartApache
fi