Измените
mail -s "Backup of /var/log/messages was successful!" $admin
на
echo hello | mail -s "Backup of /var/log/messages was successful!" $admin
или
mail -s "Backup of /var/log/messages was successful!" $admin < /dev/null
Первый вариант, вы можете использовать любой текст для тела сообщения. Второй вариант отправит электронное письмо с пустым телом сообщения. Повторите то же изменение для второй команды электронной почты в случае неудачного резервного копирования.
В целях обучения вы должны проверить успешное завершение создания tar-файла, его копирование и удаление, прежде чем определять, что оно было успешным.Для этого вы можете сделать это.
Измените
tar -czvf $of messages
на
tar -czvf $of messages && cp $of /home/user/ && rm -rf $of
Кроме того, с помощью этого изменения вы удалите cp $ из / home / user /
и rm -rf $ из
из конца сценарий.
Тогда ваш if / else будет выполняться на основе успешного завершения всех трех команд или неудачного завершения любой из трех команд в этой строке.
pgrep -f process_name > any_file_name
sed -i 's/^/kill /' any_file_name
chmod 777 any_file_name
./any_file_name
например, pgrep -f firefox
выберет PID запущенного firefox
и сохранит этот PID в файл с именем any_file_name
. Команда 'sed' добавит kill
в начало номера PID в файле 'any_file_name'. Третья строка будет исполняемым файлом any_file_name
. Теперь четвертая строка уничтожит PID, доступный в файле любое_имя_файла
. Запись вышеуказанных четырех строк в файл и выполнение этого файла может выполнить Control-C. Работает абсолютно нормально для меня.
Если кого-то интересует исправление для этой bash
функции, а не столько философия, стоящая за ней , вот предложение:
Не запускайте проблемную команду напрямую, а из оболочки, которая a )ожидает ее завершения b )не связывается с сигналами, а c )не не реализует сам механизм WCE, но просто умирает при получении SIGINT
.
Такую оболочку можно сделать с помощью awk
+ ее system()
функции.
$ while true; do awk 'BEGIN{system("ping -c5 localhost")}'; done
PING localhost(localhost (::1)) 56 data bytes
64 bytes from localhost (::1): icmp_seq=1 ttl=64 time=0.082 ms
64 bytes from localhost (::1): icmp_seq=2 ttl=64 time=0.087 ms
^C
--- localhost ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1022ms
rtt min/avg/max/mdev = 0.082/0.084/0.087/0.009 ms
[3]- Terminated ping -c5 localhost
Вставить скрипт как у OP:
#!/bin/bash
while true; do
echo -e "\n*** DATE:" `date` " ***";
echo "********************************************"
awk 'BEGIN{system(ARGV[1])}' "ping -c5 ${1-localhost}"
done