To configure Upstart to rotate the log file for a particular service, you will need to add a post-start
stanza to the service’s configuration file. This stanza should specify the command to run after the service starts, which in this case would be the logrotate command.
Here’s an example of an Upstart configuration file that rotates the log file for a service called myservice
:
start on runlevel [2345]
stop on runlevel [016]
respawn
console output
post-start script
logrotate -f /etc/logrotate.d/myservice
end script
exec /usr/bin/myservice
In this example, the logrotate
command is run with the -f
option, which forces logrotate to rotate the log file even if it is not yet time for the rotation according to the logrotate configuration. You can also specify additional options, such as the log file’s maximum size or the number of copies to keep, in the logrotate
command.
It’s also a good idea to specify a pre-stop
stanza in the configuration file that rotates the log file one last time before the service is stopped. This ensures that all log messages are captured in the rotated log files.
pre-stop script
logrotate -f /etc/logrotate.d/myservice
end script
Once you have added the post-start
and pre-stop
stanzas to the configuration file, you will need to create a logrotate configuration file for the service in /etc/logrotate.d
. The configuration file should specify the log file for the service and any options you want to use for rotating the log file, such as the maximum size or the number of copies to keep.
Here’s an example logrotate configuration file for the myservice
service:
/var/log/myservice.log {
size 100M
rotate 5
compress
delaycompress
missingok
notifempty
}
This configuration file specifies that the myservice
log file should be rotated when it reaches a size of 100MB, and that up to 5 rotated copies should be kept. The log file is also compressed and the compression is delayed until the next rotation.
Once you have created the logrotate configuration file, you can test the rotation by running the logrotate
command with the -f
option to force a rotation:
logrotate -f /etc/logrotate.d/myservice
If everything is configured correctly, the log file for the myservice
service should be rotated and a new log file should be created. You can check the rotated log files in the /var/log
directory to make sure they were created and compressed as expected.